Bộ thu thập phần tử duy nhất
Thuộc phần Logic và luồng điều khiển trong hành trình GO của Coddy. Bài học 68 trên 68.
Thử thách
DễTạo một hệ thống loại bỏ phần tử trùng lặp, sử dụng mẫu tập hợp theo phong cách Go để lọc các phần tử duy nhất từ các tập hợp chuỗi. Thử thách này sẽ kiểm tra khả năng sử dụng thành ngữ map[string]struct{} để theo dõi các phần tử đã gặp và tạo tập hợp chỉ chứa các phần tử duy nhất của bạn.
Bạn sẽ nhận được hai đầu vào:
- Một chuỗi chứa các phần tử được phân tách bằng dấu phẩy (ví dụ:
"apple,banana,apple,orange,banana,grape,apple") - Một chuỗi chứa các phần tử bổ sung cần gộp, cũng được phân tách bằng dấu phẩy (ví dụ:
"kiwi,apple,mango,banana,kiwi")
Nhiệm vụ của bạn là:
- Tạo một hàm có tên
getUniqueItems, nhận vào một lát cắt chuỗi và trả về một lát cắt mới chỉ chứa các chuỗi duy nhất - Bên trong hàm này, sử dụng thành ngữ
map[string]struct{}để theo dõi những phần tử đã gặp - Duyệt qua lát cắt đầu vào và thực hiện các bước sau với mỗi phần tử:
- Dùng thành ngữ dấu phẩy ok để kiểm tra xem phần tử có trong tập hợp của bạn hay không
- Nếu chưa gặp phần tử đó, hãy thêm nó vào cả tập hợp lẫn lát cắt kết quả
- Tách đầu vào thứ nhất theo dấu phẩy để lấy danh sách phần tử ban đầu
- Tách đầu vào thứ hai theo dấu phẩy để lấy các phần tử bổ sung
- Hiển thị tiêu đề hệ thống:
"=== UNIQUE ITEM COLLECTOR ===" - Hiển thị các phần tử ban đầu:
"Original items: [comma-separated list of all original items]" - Hiển thị các phần tử bổ sung:
"Additional items: [comma-separated list of all additional items]" - Dùng hàm
getUniqueItemsđể lấy các phần tử duy nhất từ danh sách ban đầu - Hiển thị các phần tử ban đầu duy nhất:
"Unique original items: [comma-separated list of unique items from original list]" - Gộp cả hai lát cắt đầu vào thành một lát cắt chứa tất cả phần tử
- Dùng hàm
getUniqueItemsđể lấy các phần tử duy nhất từ danh sách đã gộp - Hiển thị các phần tử duy nhất cuối cùng:
"Final unique items: [comma-separated list of all unique items]" - Hiển thị thống kê tập hợp:
"=== COLLECTION STATISTICS ===""Total original items: [count of original items]""Total additional items: [count of additional items]""Total combined items: [count of all items combined]""Unique items found: [count of unique items]""Duplicates removed: [total combined items minus unique items]"
- Hiển thị thông báo hoàn tất:
"Unique item collection completed successfully"
Dùng package strings để tách các chuỗi đầu vào và package fmt để xuất kết quả. Khi nối các phần tử để hiển thị, hãy dùng strings.Join với dấu phẩy làm dấu phân cách. Thử thách này cho thấy thành ngữ tập hợp của Go giải quyết hiệu quả vấn đề thường gặp là loại bỏ phần tử trùng lặp khỏi các tập hợp như thế nào. Bạn sẽ thường xuyên dùng mẫu này trong các ứng dụng xử lý dữ liệu.
Tự làm thử
package main
import (
"fmt"
"strings"
)
func main() {
// Đọc đầu vào
var input1 string
var input2 string
fmt.Scanln(&input1)
fmt.Scanln(&input2)
// Tách các chuỗi đầu vào thành các lát cắt
originalItems := strings.Split(input1, ",")
additionalItems := strings.Split(input2, ",")
// TODO: Viết code của bạn ở đây
// 1. Tạo hàm (function) getUniqueItems theo cách dùng map[string]struct{}
// 2. Xử lý các phần tử ban đầu để lấy các phần tử không trùng lặp
// 3. Gộp hai lát cắt và lấy các phần tử không trùng lặp từ danh sách đã gộp
// 4. Tính các số liệu thống kê
// Hiển thị tiêu đề hệ thống
fmt.Println("=== UNIQUE ITEM COLLECTOR ===")
// Hiển thị các phần tử ban đầu và phần tử bổ sung
fmt.Printf("Original items: %s\n", strings.Join(originalItems, ","))
fmt.Printf("Additional items: %s\n", strings.Join(additionalItems, ","))
// TODO: Hiển thị các phần tử ban đầu không trùng lặp, các phần tử cuối cùng không trùng lặp và số liệu thống kê
// Dùng fmt.Printf và strings.Join để định dạng đầu ra
}Tất cả bài học trong Logic và luồng điều khiển
1Luồng điều khiển nâng cao
Switch với `fallthrough`Thoát khỏi vòng lặp lồng nhauTiếp tục một vòng lặp cụ thểCâu lệnh `goto`Ôn tập: điều khiển vòng lặp nâng cao4Dự án: Danh sách việc cần làm đơn giản
Thiết lập dự ánThêm một việc cần làm2Struct và phương thức
Định nghĩa phương thức cho structReceiver giá trịReceiver con trỏChọn receiverPhương thức và hàmÔn tập: hành vi của struct5Tìm hiểu chuyên sâu về map
Map chứa structCon trỏ làm giá trị của mapKiểm tra map nilSo sánh các mapÔn tập: bộ đếm tần suất từ8Dự án: Quản lý hàng tồn kho đơn giản
Tổng quan dự ánKiểm tra hàng tồn kho3Interface (cơ bản)
Interface là gì?Định nghĩa interfaceTriển khai interfaceDùng kiểu interfaceInterface rỗngKhẳng định kiểuType switchÔn tập: hình dạng và hành viTự luyện tập: Trình biên dịch Go online