辞書の配列
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
dragonappend()でレコードを追加します。すべてのレコードのフィールドを変更するには、ループ変数を通じて代入します。配列と同様に、辞書は共有され、コピーされません。そのため、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"]) # 85print()は、配列全体とその中のすべての辞書を表示します: [{ "type": "slime", "hp": 35 }, ...]。
チャレンジ
簡単リーダーボードを作成しましょう。プログラムは整数 n を読み取り、続いてプレイヤー名とスコアをカンマで区切った行を n 行読み取ります。たとえば Mia,95 のようになります。
- 各行について、キー
"name"(名前)と"score"(int型のスコア)を持つ辞書を配列playersに追加します。 - 配列を出力します。
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
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ