Cách dùng tập hợp trong Go
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 31 trên 68.
Go không có cấu trúc dữ liệu tập hợp được tích hợp sẵn như nhiều ngôn ngữ lập trình khác. Tuy nhiên, các nhà phát triển Go đã tạo ra một giải pháp tinh tế, dùng map để mô phỏng tập hợp. Cách làm này trở nên phổ biến đến mức được xem là cách viết Go chuẩn mực.
Idiom tập hợp trong Go dùng một map khi bạn chỉ quan tâm đến các khóa, không phải các giá trị. Vì cần lưu một thứ gì đó làm giá trị, các lập trình viên Go dùng một struct rỗng struct{}. Đây là mẫu cơ bản:
var mySet map[string]struct{}Struct rỗng struct{} đặc biệt vì nó chiếm 0 byte bộ nhớ. Điều này khiến nó rất phù hợp với các tập hợp, nơi bạn chỉ cần theo dõi xem một thứ có tồn tại hay không mà không lãng phí bộ nhớ cho các giá trị vô nghĩa.
Cách tiếp cận này tận dụng tính chất cơ bản của khóa trong map: chúng phải là duy nhất. Khi thêm một mục vào tập hợp, thực chất bạn đang thêm một khóa vào map. Map tự động đảm bảo tính duy nhất, giúp tập hợp hoạt động đúng như mong muốn.
Trong các bài học tiếp theo, bạn sẽ học cách tạo, thao tác và làm việc với tập hợp bằng mẫu Go chuẩn này. Kỹ thuật này được sử dụng rộng rãi trong các codebase Go để theo dõi các phần tử duy nhất, triển khai thuật toán và giải quyết vấn đề cần kiểm tra nhanh một phần tử có thuộc tập hợp hay không.
Tự làm thử
Bài học này không có thử thách code.
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
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 vi6Go theo cách viết thành ngữ: tập hợp
Cách dùng tập hợp trong GoTạo tập hợpThêm phần tử vào tập hợpKiểm tra phần tử có thuộc tập hợp khôngXóa phần tử khỏi tập hợpLặp qua tập hợpÔn tập: tên người dùng duy nhấtTự luyện tập: Trình biên dịch Go online