Menu
CoddyTech

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ụ.

challenge icon

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à:

  1. 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
  2. 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
  3. 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 {}
  4. 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
  5. 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
  6. 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"
  7. 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
	
}
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch Go online