Menu
CoddyTech

ネストした辞書

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
challenge icon

チャレンジ

簡単

ネストされた辞書 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
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン

自分で練習してみよう: GDScriptオンラインコンパイラ