和集合と積集合
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() は [] です。
チャレンジ
簡単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
# 和集合と積集合を作成する
# 結果を出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ