Mảng 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 20 trên 78.
Khi có nhiều bản ghi với cùng các trường, hãy lưu chúng trong một mảng các từ điển: mỗi phần tử là một bản ghi.
var enemies := [
{"type": "slime", "hp": 30},
{"type": "orc", "hp": 80},
{"type": "dragon", "hp": 500}
]Chỉ số chọn bản ghi, còn khóa chọn trường: enemies[1]["type"] là "orc". Vòng lặp for cung cấp cho bạn một từ điển trong mỗi lượt:
for enemy in enemies:
if enemy["hp"] >= 80:
print(enemy["type"])orc
dragonThêm một bản ghi bằng append(). Để thay đổi một trường của mọi bản ghi, hãy gán giá trị thông qua biến vòng lặp. Giống như mảng, từ điển được dùng chung chứ không được sao chép, vì vậy enemy là từ điển bên trong mảng và thay đổi vẫn được giữ lại:
enemies.append({"type": "bat", "hp": 10})
for enemy in enemies:
enemy["hp"] += 5
print(enemies[3]) # { "type": "bat", "hp": 15 }Để tìm một bản ghi theo một trong các trường của nó, hãy lặp qua danh sách và so sánh. Bắt đầu với null để bạn biết khi nào không tìm thấy kết quả phù hợp:
var found = null
for enemy in enemies:
if enemy["type"] == "orc":
found = enemy
if found == null:
print("No orc")
else:
print(found["hp"]) # 85print() in ra toàn bộ mảng cùng với từng từ điển bên trong: [{ "type": "slime", "hp": 35 }, ...].
Thử thách
DễTạo bảng xếp hạng. Chương trình đọc một số nguyên n, rồi đọc n dòng, mỗi dòng có tên người chơi và điểm số được phân cách bằng dấu phẩy, như Mia,95.
- Với mỗi dòng, thêm một từ điển có các khóa
"name"(tên) và"score"(điểm số dưới dạngint) vào mảngplayers. - In mảng ra.
- In
Best:, tên của người chơi có điểm số cao nhất và điểm số trong ngoặc đơn. Nếu hai người chơi cùng có điểm số cao nhất, hãy in người chơi xuất hiện trước.
Với các đầu vào 3, Mia,95, Leo,80 và Ana,97, đầu ra là:
[{ "name": "Mia", "score": 95 }, { "name": "Leo", "score": 80 }, { "name": "Ana", "score": 97 }]
Best: Ana (97)Tự làm thử
extends Node
func _ready():
var n := int(OS.read_string_from_stdin())
var players := []
# Đọc n người chơi vào mảng (array)
# In ra (print) mảng và người chơi giỏi nhất
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