字典数组
本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 20 课,共 78 课。
如果有很多字段相同的记录,可以把它们存储在字典数组中:每个元素都是一条记录。
var enemies := [
{"type": "slime", "hp": 30},
{"type": "orc", "hp": 80},
{"type": "dragon", "hp": 500}
]索引选中记录,键选中字段:enemies[1]["type"] 的值是 "orc"。for 循环每次都会给你一个字典:
for enemy in enemies:
if enemy["hp"] >= 80:
print(enemy["type"])orc
dragon使用 append() 添加一条记录。要更改每条记录中的字段,请通过循环变量赋值。和数组一样,字典是共享的,不会被复制,所以 enemy 就是数组中的那个字典,更改会保留在其中:
enemies.append({"type": "bat", "hp": 10})
for enemy in enemies:
enemy["hp"] += 5
print(enemies[3]) # { "type": "bat", "hp": 15 }要根据某个字段查找记录,可以遍历并进行比较。先从 null 开始,这样你就能判断是否没有匹配项:
var found = null
for enemy in enemies:
if enemy["type"] == "orc":
found = enemy
if found == null:
print("No orc")
else:
print(found["hp"]) # 85print() 会显示整个数组及其中的每个字典:[{ "type": "slime", "hp": 35 }, ...]。
挑战
简单创建一个排行榜。程序会读取一个整数 n,然后读取 n 行,每行包含一个玩家姓名和分数,两者用逗号分隔,例如 Mia,95。
- 对于每一行,将一个字典追加到数组
players中。字典的键为"name"(姓名)和"score"(分数,类型为int)。 - 输出数组。
- 输出
Best:、分数最高的玩家姓名,以及括号中的分数。如果有两名玩家的最高分相同,则输出排在前面的玩家。
对于输入 3、Mia,95、Leo,80 和 Ana,97,输出为:
[{ "name": "Mia", "score": 95 }, { "name": "Leo", "score": 80 }, { "name": "Ana", "score": 97 }]
Best: Ana (97)亲手试试
extends Node
func _ready():
var n := int(OS.read_string_from_stdin())
var players := []
# 将 n 名玩家读入数组
# 输出数组和最优秀的玩家
pass
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: GDScript 在线编译器