Godot4 Dictionary の merge で二つの辞書を統合する

無料・軽快な 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 dictionary to this dictionary. By default, duplicate keys are not copied over, unless overwrite is true.

辞書のエントリをこの辞書に追加します。デフォルトでは、上書きが 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, unless overwrite is true. 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)
	
	return

F6 キーシーンを実行すると、 _ready イベント関数が呼び出され、study_dictionary_merge 関数が実行されます。
出力ボトムパネルを確認すると、その関数内の print 文の Dictionary のメンバ関数 merge, merged のそれぞれの結果を確認できます。

Godot4 Dictionary の merge で二つの辞書を合成する1

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 EngineDictionary オブジェクトは、merge メンバ関数で、他の Dictionary オブジェクトの内容を統合できる。
  • merged メンバ関数を用いると、オブジェクト自身は変更せずに、マージした結果を戻り値で得られる。
  • override 引数true を指定すると、2つの辞書に同じキーがある場合、引数の Dictionary オブジェクトのそのエントリーの値は上書きされ、 false の場合は上書きされない

参照サイト Thank You!

記事一覧 → Compota-Soft-Press

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました