無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、キーと値の組み合わせ(エントリー)を複数持つ Dictionary オブジェクトの merge, merged メンバ関数を用いて、2つの辞書型のデータを統合した結果を紹介します。
override 引数によって上書きの有無を変更した結果も確認します。

※ GodotEngine 4.3 を使用しています。.NET 版ではありません。
※スクリプトは自己責任でご使用ください。
merge と merged の違い
merge は、呼び出し元の Dictionary オブジェクト自身に、第1引数で指定した Dictionary オブジェクトのエントリー群をマージします。
void merge(dictionary: Dictionary, overwrite: bool = false)
Adds entries from
dictionaryto this dictionary. By default, duplicate keys are not copied over, unlessoverwriteistrue.辞書のエントリをこの辞書に追加します。デフォルトでは、上書きが true でない限り、重複キーはコピーされません。
Dictionary — Godot Engine (4.3) documentation in English #merge と Google 翻訳
merged メンバ関数は、 const で関数が宣言されている通り、呼び出し元の Dictionary オブジェクト自身は変化しません。
呼び出し元の Dictionary オブジェクトと、第1引数の Dictionary オブジェクトのマージの結果を戻り値として返します。
Dictionary merged(dictionary: Dictionary, overwrite: bool = false) const 🔗
Returns a copy of this dictionary merged with the other
dictionary. By default, duplicate keys are not copied over, unlessoverwriteistrue. See also merge.他の辞書と結合されたこの辞書のコピーを返します。デフォルトでは、上書きが true でない限り、重複キーはコピーされません。 「マージ」も参照してください。
Dictionary — Godot Engine (4.3) documentation in English #merged と Google 翻訳
overwrite 引数でエントリーを上書きするかどうかを選択可能
前述の引数の説明にあるように merge, merged 関数の第二引数 overwrite では bool 型を指定して、2つの辞書のマージで、同じキーがあった場合に上書きするかどうかを選択できます。
true の場合は上書きされ、 false の場合は上書きされません。
これにより、2つの辞書のどちらのデータを優先するかを選択できます。
Dictionary merge, merged 関数の使用例
以下のスクリプトを、テスト用に作成したシーンのルートノードに割り当てたスクリプトに貼り付けます。
_ready() イベント関数には study_dictionary_merge() を追記して、その関数をそのあとに貼り付けてください。
# Called when the node enters the scene tree for the first time.
func _ready():
study_dictionary_merge()
return
func study_dictionary_merge():
var dic1: Dictionary = {
"one": 1, "two": 2,
}
var dic2: Dictionary = {
"two": "II", "three": "III",
}
var dic_merge_override_true := dic1.merged(dic2, true)
var dic_merge_override_false := dic1.merged(dic2, false)
print("dic1.merged(dic2, true) = ", dic_merge_override_true)
print("dic1.merged(dic2, false) = ", dic_merge_override_false)
print("dic1.merge(dic2, true) before dic1 = ", dic1)
dic1.merge(dic2, true)
print("dic1.merge(dic2, true) after dic1 = ", dic1)
returnF6 キーでシーンを実行すると、 _ready イベント関数が呼び出され、study_dictionary_merge 関数が実行されます。
出力ボトムパネルを確認すると、その関数内の print 文の Dictionary のメンバ関数 merge, merged のそれぞれの結果を確認できます。

merged メンバ関数は、呼び出し元の Dictionary オブジェクトと、第1引数の Dictionary オブジェクトの内容をマージした結果を返しています。
実行結果の1行目は override = true なので、重複する two キーの値が、第1引数の Dictionary の two キーの値に上書きされています。
実行結果2行目は override = false なので、重複する two キーの値は、上書きされず、呼び出し元の two キーの値が残されています。
4 行目では、 merge メンバ関数によって、呼び出し元の Dictionary オブジェクト自身に、第1引数の Dictionary オブジェクトの内容をマージした結果が確認できました。
dic1.merged(dic2, true) = { "one": 1, "two": "II", "three": "III" }
dic1.merged(dic2, false) = { "one": 1, "two": 2, "three": "III" }
dic1.merge(dic2, true) before dic1 = { "one": 1, "two": 2 }
dic1.merge(dic2, true) after dic1 = { "one": 1, "two": "II", "three": "III" }まとめ
- Godot Engine の Dictionary オブジェクトは、merge メンバ関数で、他の Dictionary オブジェクトの内容を統合できる。
- merged メンバ関数を用いると、オブジェクト自身は変更せずに、マージした結果を戻り値で得られる。
- override 引数で true を指定すると、2つの辞書に同じキーがある場合、引数の Dictionary オブジェクトのそのエントリーの値は上書きされ、 false の場合は上書きされない。
参照サイト Thank You!
- Godot Engine – Free and open source 2D and 3D game engine
- Dictionary — Godot Engine (4.3) documentation in English
- Dictionary — Godot Engine (4.3) documentation in English #merge
- Dictionary — Godot Engine (4.3) documentation in English #merged
記事一覧 → Compota-Soft-Press
コメント