Gộp từ điển
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 21 trên 78.
merge() thêm từng cặp khóa và giá trị từ một từ điển khác vào từ điển mà bạn gọi phương thức này. Các khóa chỉ có trong từ điển kia sẽ được thêm vào cuối:
var settings := {"volume": 5, "difficulty": "normal"}
var saved := {"difficulty": "hard", "subtitles": true}
settings.merge(saved)
print(settings){ "volume": 5, "difficulty": "normal", "subtitles": true }"difficulty" có trong cả hai từ điển, và merge() giữ lại giá trị mà settings đã có: theo mặc định, các khóa hiện có không bị ghi đè. Truyền true làm đối số thứ hai để dùng giá trị từ từ điển còn lại:
var options := {"volume": 5, "difficulty": "normal"}
options.merge(saved, true)
print(options["difficulty"]) # hardmerge() thay đổi chính từ điển đó và không trả về gì, vì vậy var result := a.merge(b) là lỗi. Để giữ nguyên cả hai từ điển, hãy dùng merged(). Phương thức này nhận cùng các đối số và trả về một từ điển mới:
var defaults := {"volume": 5, "difficulty": "normal"}
var choice := {"difficulty": "hard"}
var final_settings := defaults.merged(choice, true)
print(final_settings) # { "volume": 5, "difficulty": "hard" }
print(defaults) # { "volume": 5, "difficulty": "normal" }Khi một khóa có trong cả hai từ điển và bạn muốn kết hợp các giá trị, chẳng hạn như cộng hai khoản tiền, hãy tự viết vòng lặp:
var bag := {"gold": 10, "gems": 1}
var loot := {"gold": 5, "keys": 2}
for key in loot:
bag[key] = bag.get(key, 0) + loot[key]
print(bag) # { "gold": 15, "gems": 1, "keys": 2 }Thử thách
DễMột bản cập nhật trò chơi đã thêm các cài đặt mới. Các cài đặt đã lưu của người chơi được đọc từ một dòng đầu vào, viết dưới dạng các cặp key=value ngăn cách bằng dấu phẩy (dòng này có thể để trống). Đoạn code đã cho lưu chúng vào từ điển saved.
Điền các cài đặt còn thiếu vào bản lưu: thêm vào saved mọi cặp trong defaults có khóa chưa có trong đó, không thay đổi các giá trị người chơi đã chọn và không thay đổi defaults. Sau đó in ra saved, rồi in ra defaults ở dòng tiếp theo.
Với đầu vào difficulty=hard,volume=8, đầu ra là:
{ "difficulty": "hard", "volume": "8", "subtitles": "off", "language": "en" }
{ "difficulty": "normal", "volume": "5", "subtitles": "off", "language": "en" }Tự làm thử
extends Node
func _ready():
var defaults := {"difficulty": "normal", "volume": "5", "subtitles": "off", "language": "en"}
var saved := {}
for pair in OS.read_string_from_stdin().split(",", false):
var parts := pair.split("=")
saved[parts[0]] = parts[1]
# Thêm các giá trị mặc định còn thiếu vào saved, rồi in ra cả hai từ điển (dictionary)
pass
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