Kiểm tra phần tử có thuộc tập hợp không
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 34 trên 68.
Giờ đây, khi đã biết cách thêm phần tử vào tập hợp, thao tác thiết yếu tiếp theo là kiểm tra xem một phần tử cụ thể có tồn tại trong tập hợp hay không. Đây là lúc thành ngữ "comma ok" của Go trở nên vô cùng hữu ích.
Để kiểm tra xem một phần tử (element) có tồn tại trong tập hợp (set) của bạn hay không, hãy dùng cú pháp giống như khi kiểm tra khóa trong map:
_, ok := colors["red"]
if ok {
fmt.Println("Red is in the set")
} else {
fmt.Println("Red is not in the set")
}Dấu gạch dưới _ được dùng vì chúng ta không quan tâm đến giá trị thực tế (luôn là một struct rỗng). Chúng ta chỉ quan tâm đến biến boolean ok, biến này cho biết khóa có tồn tại hay không.
Bạn cũng có thể dùng mẫu này trực tiếp trong câu lệnh if để viết code ngắn gọn hơn:
if _, exists := colors["blue"]; exists {
fmt.Println("Blue is in the set")
}Việc kiểm tra phần tử có thuộc tập hợp (set) hay không diễn ra nhanh và hiệu quả, nhờ cách triển khai map được tối ưu hóa của Go, giúp bạn tận dụng hiệu năng của một cấu trúc dữ liệu tập hợp thực thụ.
Thử thách
DễXây dựng một hệ thống xác minh thành viên nhóm để kiểm tra xem những người cụ thể có thuộc nhóm dự án hay không bằng cách dùng cách viết tập hợp của Go. Thử thách này minh họa cách dùng cách viết comma ok để kiểm tra một phần tử có thuộc tập hợp hay không.
Bạn sẽ nhận được hai đầu vào:
- Một chuỗi chứa các thành viên nhóm, phân tách bằng dấu phẩy (ví dụ:
"Alice,Bob,Charlie,Diana,Eve") - Một chuỗi chứa những người cần kiểm tra, phân tách bằng dấu phẩy (ví dụ:
"Bob,Frank,Alice,Grace,Charlie")
Nhiệm vụ của bạn là:
- Tạo một tập hợp (set) bằng cách viết quen thuộc trong Go
map[string]struct{}để lưu các thành viên nhóm - Phân tích chuỗi đầu vào thứ nhất bằng cách tách chuỗi theo dấu phẩy để lấy tên từng thành viên nhóm
- Thêm từng thành viên nhóm vào tập hợp bằng cách dùng giá trị struct rỗng
{} - Phân tích chuỗi đầu vào thứ hai bằng cách tách chuỗi theo dấu phẩy để lấy danh sách những người cần xác minh
- Với mỗi người cần kiểm tra, dùng cách viết comma ok
_, ok := teamSet[person]để kiểm tra xem người đó có thuộc tập hợp hay không - Hiển thị kết quả xác minh cho từng người đang được kiểm tra:
- Nếu người đó thuộc nhóm:
"[person] is on the team" - Nếu người đó không thuộc nhóm:
"[person] is not on the team"
- Nếu người đó thuộc nhóm:
- Sau khi kiểm tra tất cả mọi người, hiển thị phần tổng kết:
"Team size: [team_member_count]""People checked: [people_checked_count]""Team members found: [found_count]""Non-team members: [not_found_count]"
Dùng gói strings để tách các chuỗi đầu vào theo dấu phẩy. Thử thách này minh họa cách viết comma ok cung cấp một cách an toàn và hiệu quả để kiểm tra một phần tử có thuộc tập hợp trong Go hay không, đồng thời trả về cả giá trị lẫn một giá trị boolean cho biết khóa có tồn tại hay không.
Tự làm thử
package main
import (
"fmt"
"strings"
)
func main() {
// Đọc đầu vào
var teamMembersInput string
var peopleToCheckInput string
fmt.Scanln(&teamMembersInput)
fmt.Scanln(&peopleToCheckInput)
// Phân tích các chuỗi đầu vào
teamMembers := strings.Split(teamMembersInput, ",")
peopleToCheck := strings.Split(peopleToCheckInput, ",")
// TODO: Viết code bên dưới
// Tạo tập hợp bằng map[string]struct{}
// Thêm các thành viên trong nhóm vào tập hợp
// Kiểm tra từng người bằng cú pháp comma ok
// Hiển thị kết quả kiểm tra và phần tổng kết
}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