Godot4 辞書を使った重複しない要素を持った配列への変換のスクリプト例

無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、配列 ( Array ) の重複した要素を1つにまとめ、重複していない配列を得る関数を、辞書 ( Dictionary ) のキーの特性を活用して作成したので、そのスクリプト例GUT によるテストコードテスト結果について紹介します。

※ GodotEngine 4.3 を使用しています。.NET 版ではありません。
※スクリプトは自己責任でご使用ください。

重複しない配列の例

例えば [1, 4, 4, 3, 2, 4, 2] という数値の配列があったとします。
この例では、数値 4 が 3 つあり、数値 2 が 2 つあって、それぞれ重複しています。

今回紹介する関数を使うことで、重複しない要素を持った配列に変換します。
例では [1, 4, 4, 3, 2, 4, 2] を [1, 4, 3, 2] という重複しない要素の配列に変換します。

GodotEngine の辞書型 (Dictionary) とは

辞書型 (Dictionary)は、一意のキーによって参照される値を含む連想コンテナです。
この一意のキーとは、1つの辞書型オブジェクトの中のキーは重複しないということです。
今回は、この特性を利用して、配列要素が重複しない一意の要素の配列に変換します。
#個人的には連想配列の呼び方の方が好きです。

Dictionary

A built-in data structure that holds key-value pairs.

Description

Dictionaries are associative containers that contain values referenced by unique keys. Dictionaries will preserve the insertion order when adding new entries. In other programming languages, this data structure is often referred to as a hash map or an associative array.

You can define a dictionary by placing a comma-separated list of key: value pairs inside curly braces {}.

辞書
キーと値のペアを保持する組み込みのデータ構造。

説明
辞書は、一意のキーによって参照される値を含む連想コンテナです。辞書は、新しいエントリを追加するときに挿入順序を保持します。他のプログラミング言語では、このデータ構造はハッシュ マップまたは連想配列と呼ばれることがよくあります。

中括弧 {} 内にキーと値のペアのコンマ区切りのリストを配置することで、辞書を定義できます。
Dictionary — Godot Engine (4.3)の日本語のドキュメント と Google 翻訳

スクリプト例

配列要素の重複を除去する関数を追加する sc_util.gd は、静的関数にアクセスしやすいように ScUtil というクラス名を設定しています。

extends Object
class_name ScUtil

以下の関数定義を sc_util.gd ファイルに追加します。

## [param array] の要素から重複を除いた配列に変換した結果を返します。
## 辞書型のキーは一意な特性を利用して、配列の要素から重複を除いたユニークな配列を作成します。
## 例えば ["A", "B", "C", "C", "C", "A"] の場合 ["A", "B", "C"] に変換します。
static func to_unique_array(array: Array) -> Array:
	var dictionary: Dictionary = {}
	for element in array:
		# 配列の要素をキーとして、値を設定します。これにより重複しないキーに対応する値が割り当てられます。
		# 値に特に意味はありません。
		dictionary[element] = true
	# 一意のキーの配列を返します。
	return dictionary.keys()

テスト

先ほど sc_util.gd に追加した関数をテストする関数を GUT のスクリプトに追加します。

このテストでは [“A”, “B”, “C”, “C”, “C”, “A”] という “A” が 2 個、 “C” が 3 個、重複している配列を作成した関数に渡し、戻り値で [“A”, “B”, “C”] という要素が重複していない配列を得られることをテストします。

extends GutTest
## ScUtil クラスで定義されたユーティリティ関数のテストを行います。

# 他のテスト関数は省略します。

## [method ScUtil.unique_array] のテスト関数です。
## 重複した要素を含む配列から、重複を除いた配列が戻り値として得られることを確認します。
## 戻り値の配列が、重複しない要素の個数を要素数に持つこと。、もとからある要素は存在し、もとからない要素は存在しないことを確認します。
func test_to_unique_array_1():
	var array1 := ["A", "B", "C", "C", "C", "A"]
	var unique_array1: Array = ScUtil.to_unique_array(array1)
	assert_eq(unique_array1.has("A"), true)
	assert_eq(unique_array1.has("B"), true)
	assert_eq(unique_array1.has("C"), true)
	assert_eq(unique_array1.has("D"), false)
	assert_eq(unique_array1.size(), 3)
	return

GUT ボトムパネルを選択して、左上の RunAll ボタンを押して、テスト用の関数が書かれている gd ファイルを実行します。

Godot4 GUT で to_unique_array 関数のテストの実行

テスト関数で合格したことで、作成した関数が、テストで用いた配列の要素の重複を除去したこと確認できました。

Godot4 GUT で to_unique_array 関数のテスト結果

GUT による単体テストの詳細については以下の記事を参照してください。

まとめ

今回は、無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、配列 ( Array ) の重複した要素を1つにまとめ、重複していない配列を得る関数を、辞書 ( Dictionary ) のキーの特性を活用して作成したので、そのスクリプト例GUT によるテストコードテスト結果について紹介しました。

参照サイト 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をコピーしました