Menu
CoddyTech

辞書の配列

CoddyのGDScriptジャーニー「ロジックとフロー」セクションの一部。レッスン 20/78。

同じフィールドを持つレコードがたくさんある場合は、辞書の配列に格納します。各要素が1つのレコードです。

var enemies := [
	{"type": "slime", "hp": 30},
	{"type": "orc", "hp": 80},
	{"type": "dragon", "hp": 500}
]

インデックスでレコードを選び、キーでフィールドを選びます。enemies[1]["type"]は"orc"です。forループでは、1回の繰り返しごとに辞書が1つ渡されます。

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 }

フィールドの1つを使ってレコードを見つけるには、ループして比較します。何も一致しなかった場合に判別できるよう、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. 各行について、キー "name"(名前)と "score"(int 型のスコア)を持つ辞書を配列 players に追加します。
  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オンラインコンパイラ