Từ điển lồng nhau
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 19 trên 78.
Giá trị trong từ điển có thể là một từ điển khác. Từ điển lồng nhau nhóm các dữ liệu có liên quan: các khóa bên ngoài đặt tên cho các bản ghi, còn mỗi từ điển bên trong chứa các trường của một bản ghi.
var heroes := {
"Mia": {"hp": 100, "class": "mage"},
"Leo": {"hp": 80, "class": "knight"}
}Liên kết các khóa để truy cập giá trị bên trong. heroes["Mia"] là từ điển bên trong của Mia, còn ["hp"] đọc giá trị từ đó. Cách gán cũng tương tự:
print(heroes["Mia"]["hp"]) # 100
heroes["Leo"]["hp"] -= 30 # Leo chịu sát thương
heroes["Mia"]["mana"] = 50 # Chỉ thêm một cặp khóa-giá trị cho Mia
print(heroes["Mia"]){ "hp": 100, "class": "mage", "mana": 50 }Để thêm toàn bộ bản ghi, hãy gán một từ điển cho khóa bên ngoài mới: heroes["Ana"] = {"hp": 90, "class": "archer"}.
Thiếu khóa ở bất kỳ cấp nào đều gây ra lỗi. Khi một bản ghi có thể bị thiếu, hãy gọi get() với một từ điển rỗng làm giá trị mặc định, rồi gọi get() lần nữa trên kết quả:
print(heroes.get("Zed", {}).get("hp", 0)) # 0Để truy cập mọi giá trị bên trong, hãy lặp qua các khóa bên ngoài và đọc dữ liệu từ từng từ điển bên trong:
var total_hp := 0
for hero in heroes:
total_hp += heroes[hero]["hp"]
print(total_hp) # 150Thử thách
DễTừ điển lồng nhau inventory đã cho: mỗi khóa bên ngoài là một phòng ban, mỗi khóa bên trong là một mặt hàng, và mỗi giá trị bên trong là số lượng tồn kho.
Chương trình đọc một dòng: các lượt tra cứu được viết theo dạng department/item và phân tách bằng dấu phẩy. Với mỗi lượt tra cứu, in ra một dòng theo đúng thứ tự:
- lượt tra cứu, dấu hai chấm, dấu cách và số lượng, nếu phòng ban đó có mặt hàng ấy
- lượt tra cứu theo sau bởi
: missing, nếu phòng ban hoặc mặt hàng không tồn tại
Sau đó, in ra Total inventory: theo sau là tổng số lượng của mọi mặt hàng trong mọi phòng ban.
Với đầu vào fruits/apples,meat/beef,fruits/kiwis,candy/gum, đầu ra là:
fruits/apples: 12
meat/beef: 7
fruits/kiwis: missing
candy/gum: missing
Total inventory: 39Tự làm thử
extends Node
func _ready():
var inventory := {
"fruits": {"apples": 12, "bananas": 4},
"meat": {"beef": 7, "chicken": 5},
"dairy": {"milk": 9, "cheese": 2}
}
var lookups := OS.read_string_from_stdin().split(",")
# In ra số lượng cho từng mục tra cứu, hoặc "missing" nếu không tìm thấy
# In ra tổng của tất cả số lượng
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