Menu
CoddyTech

和集合と積集合

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

2つの集合は、一般的に次の2つの方法で組み合わせることができます。

  • 和集合には、どちらか一方の集合に含まれるすべての要素が含まれます。
  • 共通部分には、両方の集合に含まれる要素だけが含まれます。

GDScriptにはこれらの演算子がないため、ループを使って作ります。和集合を作るには、両方の集合の要素を新しい集合に追加します。両方の集合に含まれる要素は、同じキーに格納されます:

var mia := {"forest": true, "cave": true}
var leo := {"cave": true, "tower": true}
var either := {}
for place in mia:
	either[place] = true
for place in leo:
	either[place] = true
print(either.keys()) # ["forest", "cave", "tower"]

すべての値がtrueであるため、merged()は1回の呼び出しで同じ和集合を返します:var either := mia.merged(leo)。新しい辞書を返し、miaは変更しません。

共通部分を求めるには、一方の集合をループし、もう一方の集合にも含まれている要素を残します。

var both := {}
for place in mia:
	if leo.has(place):
		both[place] = true
print(both.keys()) # ["cave"]

集合に共通する要素がない場合、共通部分は空で、both.keys() は [] です。

challenge icon

チャレンジ

簡単

2 人のプレイヤーが、それぞれいくつかのスキルをアンロックしました。プログラムは、1 人目と 2 人目のプレイヤーのスキルをスペース区切りで、それぞれ 1 行ずつ読み込み、スターターコードで集合 first と second を作成します。

2 つの集合の和集合と共通部分を、要素を , で連結して出力します。

  • All skills: の後に和集合を出力します。1 人目のプレイヤーのスキルに続けて、2 人目のプレイヤーの新しいスキルを出力します。
  • Shared skills: の後に共通部分を、1 人目のプレイヤーの順序で出力します。共有するスキルがない場合は none を出力します。

入力が次の場合:

jump dash
dash swim

出力は次のとおりです。

All skills: jump, dash, swim
Shared skills: dash

自分で試してみよう

extends Node

func _ready():
	var first := {}
	for skill in OS.read_string_from_stdin().split(" ", false):
		first[skill] = true
	var second := {}
	for skill in OS.read_string_from_stdin().split(" ", false):
		second[skill] = true

	# 和集合と積集合を作成する

	# 結果を出力する
quiz icon腕試し

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

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

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