Menu
CoddyTech

Tập hợp là gì?

Thuộc phần Logic và luồng chương trình trong hành trình GDScript của Coddy. Bài học 31 trên 78.

tập hợp là một tập hợp các giá trị duy nhất: mỗi giá trị xuất hiện một lần hoặc không xuất hiện. Câu hỏi bạn đặt ra cho một tập hợp là “giá trị này có phải là phần tử không?”. Các huy hiệu người chơi đã nhận, các cấp độ đã ghé thăm và tên người dùng đã được sử dụng đều là các tập hợp.

Một mảng (array) lưu giữ mọi bản sao bạn thêm vào:

var pickups := ["sword", "shield", "sword"]
print(pickups.size()) # 3

GDScript không có kiểu Set. Thay vào đó, bạn dùng một từ điển: các khóa của từ điển là duy nhất, nên các khóa chính là phần tử của tập hợp. Các giá trị không được dùng đến, và theo quy ước, mọi giá trị đều là true:

var items := {"sword": true, "shield": true}
items["sword"] = true # Đã là phần tử: không có gì thay đổi
print(items.size()) # 2
print(items.keys()) # ["sword", "shield"]

keys() trả về các thành viên dưới dạng mảng (array), theo thứ tự chúng được thêm vào lần đầu. Tập hợp (set) rỗng là một từ điển (dictionary) rỗng, {}.

Một biểu thức tạo tập hợp liệt kê mỗi phần tử một lần. Viết cùng một khóa hai lần bên trong {} sẽ gây lỗi và khiến chương trình dừng trước khi chạy.

Để ghi rõ kiểu của tập hợp, hãy dùng từ điển (dictionary) có kiểu: var badges: Dictionary[String, bool] = {}

challenge icon

Thử thách

Dễ

Một người chơi đã đấu bốn trận và nhận được một huy hiệu ở mỗi trận. Một số huy hiệu bị trùng. Chương trình đọc bốn dòng đầu vào, mỗi dòng chứa tên một huy hiệu.

Thêm từng huy hiệu vào tập hợp (set) badges, rồi in ra số lượng huy hiệu khác nhau và các phần tử của tập hợp dưới dạng mảng (array). Với các huy hiệu Sniper, Medic, Sniper và Builder, đầu ra là:

Unique badges: 3
["Sniper", "Medic", "Builder"]

Tự làm thử

extends Node

func _ready():
	var badges := {}
	for i in range(4):
		var badge := OS.read_string_from_stdin()
		# Thêm badge vào tập hợp
		pass

	# In ra số lượng badge và các badge
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 chương trình

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