Menu
CoddyTech

字典数组

本课属于 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"]) # 85

print() 会显示整个数组及其中的每个字典:[{ "type": "slime", "hp": 35 }, ...]。

challenge icon

挑战

简单

创建一个排行榜。程序会读取一个整数 n,然后读取 n 行,每行包含一个玩家姓名和分数,两者用逗号分隔,例如 Mia,95。

  1. 对于每一行,将一个字典追加到数组 players 中。字典的键为 "name"(姓名)和 "score"(分数,类型为 int)。
  2. 输出数组。
  3. 输出 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
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: GDScript 在线编译器