集合とは?
CoddyのGDScriptジャーニー「ロジックとフロー」セクションの一部。レッスン 31/78。
集合は一意な値の集まりです。各値は1回だけ含まれるか、まったく含まれません。集合に対して尋ねるのは、「この値は含まれているか?」です。プレイヤーが獲得したバッジ、すでに訪れたレベル、すでに使われているユーザー名は集合です。
配列には、追加したすべてのコピーが保持されます:
var pickups := ["sword", "shield", "sword"]
print(pickups.size()) # 3GDScriptにはSet型がありません。代わりに辞書を使います。キーは一意なので、キーが集合の要素になります。値は使用せず、慣例としてすべての値をtrueにします:
var items := {"sword": true, "shield": true}
items["sword"] = true # すでに要素として存在するため、何も変わらない
print(items.size()) # 2
print(items.keys()) # ["sword", "shield"]keys()は、メンバーを最初に追加された順序で配列として返します。空のセットは空の辞書、{}です。
集合リテラルでは、各要素を一度ずつ記述します。{}の中で同じキーを2回記述するとエラーになり、プログラムは実行前に停止します。
セットの型を明示するには、型付き辞書を使います: var badges: Dictionary[String, bool] = {}
チャレンジ
簡単プレイヤーは4試合をプレイし、それぞれの試合でバッジを1つ獲得しました。同じバッジが重複することもあります。プログラムは入力の4行を読み取り、各行にはバッジ名が1つずつ含まれています。
各バッジを集合 badges に追加し、異なるバッジの数と集合の要素を配列として出力してください。バッジが Sniper、Medic、Sniper、Builder の場合、出力は次のとおりです。
Unique badges: 3
["Sniper", "Medic", "Builder"]自分で試してみよう
extends Node
func _ready():
var badges := {}
for i in range(4):
var badge := OS.read_string_from_stdin()
# バッジを集合に追加する
pass
# バッジの数とバッジを出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ