Hợp và giao
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 34 trên 78.
Có hai cách phổ biến để kết hợp các tập hợp:
- Phép hợp gồm mọi phần tử có trong một trong hai tập hợp.
- Phép giao chỉ gồm các phần tử có trong cả hai tập hợp.
GDScript không có toán tử cho các phép này, nên bạn tạo chúng bằng vòng lặp. Với phép hợp, hãy thêm các phần tử của cả hai tập hợp vào một tập hợp mới. Phần tử có trong cả hai tập hợp sẽ nằm cùng một khóa:
var mia := {"forest": true, "cave": true}
var leo := {"cave": true, "tower": true}
var either := {}
for place in mia:
either[place] = true
for place in leo:
either[place] = true
print(either.keys()) # ["forest", "cave", "tower"]Vì mọi giá trị đều là true, merged() trả về cùng một hợp chỉ với một lần gọi: var either := mia.merged(leo). Hàm này trả về một từ điển mới và giữ nguyên mia.
Để lấy giao của hai tập hợp, hãy duyệt qua một tập hợp và giữ lại các phần tử có trong tập hợp còn lại:
var both := {}
for place in mia:
if leo.has(place):
both[place] = true
print(both.keys()) # ["cave"]Khi hai tập hợp không có phần tử chung, giao của chúng là rỗng và both.keys() là [].
Thử thách
DễHai người chơi mỗi người đã mở khóa một số kỹ năng. Chương trình đọc hai dòng, gồm các kỹ năng của người chơi thứ nhất và người chơi thứ hai, được phân tách bằng dấu cách, rồi code khởi đầu tạo các tập hợp first và second.
In ra phép hợp và phép giao của hai tập hợp, với các phần tử được nối bằng , :
All skills:theo sau là phép hợp: các kỹ năng của người chơi thứ nhất, rồi đến những kỹ năng mới của người chơi thứ haiShared skills:theo sau là phép giao theo thứ tự của người chơi thứ nhất, hoặcnonenếu họ không có kỹ năng chung
Với đầu vào:
jump dash
dash swimđầu ra là:
All skills: jump, dash, swim
Shared skills: dashTự làm thử
extends Node
func _ready():
var first := {}
for skill in OS.read_string_from_stdin().split(" ", false):
first[skill] = true
var second := {}
for skill in OS.read_string_from_stdin().split(" ", false):
second[skill] = true
# Tạo tập hợp hợp và tập hợp giao
# 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