嵌套字典
本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 19 课,共 78 课。
字典的值可以是另一个字典。嵌套字典用于将相关数据分组:外层键用于命名记录,每个内层字典则存储一条记录的字段。
var heroes := {
"Mia": {"hp": 100, "class": "mage"},
"Leo": {"hp": 80, "class": "knight"}
}连续使用键,即可访问内部字典中的值。heroes["Mia"] 是 Mia 的内部字典,["hp"] 会从中读取值。赋值的方式也一样:
print(heroes["Mia"]["hp"]) # 100
heroes["Leo"]["hp"] -= 30 # Leo 受到伤害
heroes["Mia"]["mana"] = 50 # 只给 Mia 添加一个键值对
print(heroes["Mia"]){ "hp": 100, "class": "mage", "mana": 50 }要添加一条完整记录,请将一个字典赋值给新的外层键:heroes["Ana"] = {"hp": 90, "class": "archer"}。
任一层缺少键都会导致错误。如果记录可能不存在,可以调用 get(),并将空字典设为默认值,然后再对结果调用 get():
print(heroes.get("Zed", {}).get("hp", 0)) # 0要访问每个内部值,请遍历外层字典的键,并从每个内层字典中读取值:
var total_hp := 0
for hero in heroes:
total_hp += heroes[hero]["hp"]
print(total_hp) # 150挑战
简单给定嵌套字典 inventory:每个外层键表示一个部门,每个内层键表示一个物品,每个内层值表示库存数量。
程序读取一行输入:多个查询项以逗号分隔,格式为 department/item。按顺序为每个查询项打印一行:
- 如果该部门有这个物品,则打印查询项、冒号、一个空格和数量
- 如果部门或物品不存在,则打印查询项,后面跟着
: missing
然后打印 Total inventory: ,后面跟着所有部门中每个物品数量的总和。
对于输入 fruits/apples,meat/beef,fruits/kiwis,candy/gum,输出为:
fruits/apples: 12
meat/beef: 7
fruits/kiwis: missing
candy/gum: missing
Total inventory: 39亲手试试
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(",")
# 输出每个查询对应的数量,找不到时输出 missing
# 输出所有数量的总和
pass
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: GDScript 在线编译器