Menu
CoddyTech

集合とは?

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

集合は一意な値の集まりです。各値は1回だけ含まれるか、まったく含まれません。集合に対して尋ねるのは、「この値は含まれているか?」です。プレイヤーが獲得したバッジ、すでに訪れたレベル、すでに使われているユーザー名は集合です。

配列には、追加したすべてのコピーが保持されます:

var pickups := ["sword", "shield", "sword"]
print(pickups.size()) # 3

GDScriptには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] = {}

challenge icon

チャレンジ

簡単

プレイヤーは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

	# バッジの数とバッジを出力する
quiz icon腕試し

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

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

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