Hiệu tập hợp
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 35 trên 78.
Phép hiệu của hai tập hợp chứa các phần tử có trong tập hợp thứ nhất nhưng không có trong tập hợp thứ hai. Lặp qua tập hợp thứ nhất và giữ lại những phần tử không có trong tập hợp thứ hai:
var needed := {"rope": true, "torch": true, "map": true}
var packed := {"torch": true, "apple": true}
var missing := {}
for item in needed:
if not packed.has(item):
missing[item] = true
print(missing.keys()) # ["rope", "map"]Thứ tự của các tập hợp rất quan trọng. Hiệu của packed và needed là ["apple"]: những gì bạn đã đóng gói nhưng không cần.
Hai phần khác biệt kết hợp lại tạo thành hiệu đối xứng: các phần tử chỉ có trong đúng một tập hợp. Ở đây, đó là rope, map và apple.
Để kiểm tra xem có thiếu gì không, has_all() nhận một mảng và trả về true khi mọi phần tử trong mảng đều là khóa của từ điển:
print(packed.has_all(needed.keys())) # false: thiếu rope và mapThử thách
DễTrước chuyến đi, bạn so sánh những món đồ cần mang với những món đã đóng gói. Chương trình đọc hai dòng, gồm các món đồ cần mang và các món đã đóng gói, phân cách bằng dấu cách, rồi đoạn code khởi đầu tạo các tập hợp needed và packed.
In ra hai dòng, với các phần tử được nối bằng , :
Missing:theo sau là những món đồ cần mang nhưng chưa được đóng góiExtra:theo sau là những món đồ đã đóng gói nhưng không cần mang
Giữ nguyên thứ tự của tập hợp mà bạn lặp qua. In ra none thay cho danh sách rỗng. Với đầu vào:
rope torch map
torch appleđầu ra là:
Missing: rope, map
Extra: appleTự làm thử
extends Node
func _ready():
var needed := {}
for item in OS.read_string_from_stdin().split(" ", false):
needed[item] = true
var packed := {}
for item in OS.read_string_from_stdin().split(" ", false):
packed[item] = true
# Tạo hai tập hợp phần tử khác nhau
# In ra kết quả
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
1Chuyên sâu về chuỗi
Các phương thức của chuỗiTìm kiếm trong chuỗiThay thế và xóa khoảng trắngTách và nốiÔn tập: Kiểm tra tên người dùng7Kiểu liệt kê
Kiểu liệt kê là gì?Định nghĩa kiểu liệt kêCác giá trị của kiểu liệt kêKiểu liệt kê trong matchÔn tập: đèn giao thông10Hàm nâng cao
Trả về nhiều giá trịHàm lambda phần 1Hàm lambda phần 2Ôn tập: sắp xếp bằng lambdaHàm đệ quy phần 1Hàm đệ quy phần 2Ôn tập: tính tổng mảng lồng nhau13Hệ thống quản lý hàng tồn kho
Tổng quan dự ánThêm mặt hàng2Ra quyết định nâng cao
So khớp với biếnĐiều kiện bảo vệ trong so khớpMẫu mảngMẫu từ điểnKiểm tra thành viênÔn tập: Bộ phân tích lệnh5Ứng dụng sổ liên lạc
Hiển thị menuThêm liên hệ8Trình quản lý hồ sơ học sinh
Tổng quan dự ánThêm học sinh3Mảng nhiều chiều
Cơ bản về mảng 2 chiềuTruy cập phần tử trong mảng 2 chiềuVòng lặp lồng nhau với mảng 2 chiềuÔn tập: mảng 2 chiềuMảng răng cưaCác mẫu phổ biến với mảng 2 chiềuÔn tập: bàn cờ6Tập hợp với từ điển
Tập hợp là gì?Từ điển như một tập hợpThêm và xóaHợp và giaoHiệu tập hợpÔn tập: Xóa phần tử trùng lặp9Tổng hợp dữ liệu nâng cao
Tính tổng các giá trịTìm giá trị nhỏ nhất và lớn nhấtSắp xếp tùy chỉnhÔn tập: Sắp xếp từ điểnTự luyện tập: Trình biên dịch GDScript online