ネストした辞書
CoddyのGDScriptジャーニー「ロジックとフロー」セクションの一部。レッスン 19/78。
辞書の値には、別の辞書を指定できます。ネストされた辞書は関連するデータをまとめます。外側のキーはレコード名を示し、それぞれの内側の辞書には1つのレコードのフィールドが格納されます。
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 が与えられます。外側の各キーは部門、内側の各キーは品目、内側の各値は在庫数量です。
プログラムは1行を読み込みます。カンマで区切られた、department/item の形式の検索項目です。各検索項目について、順番に1行を出力します。
- その部門にその品目がある場合は、検索項目、コロン、スペース、数量
- 部門または品目が存在しない場合は、検索項目の後に
: 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(",")
# 各lookupの数量、またはmissingを出力する
# すべての数量の合計を出力する
pass
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ