【Godot4.3】配列(Array)の使い方

GodotEngine

この記事では、Godot Engineにおける 配列(Array)の基本的な使用方法についてまとめます。

新規作成と要素の操作

配列の作成

配列は、変数と同様に var で配列名を指定し、[] を使用して要素を宣言することができます。

var my_array = []  # 空の配列を作成
var numbers = [1, 2, 3, 4, 5]  # 数値の配列
var strings = ["apple", "banana", "cherry"]  # 文字列の配列
var mixed = [1, "hello", true, 3.14]  # 異なる型を混ぜることも可能
#二次元配列
var grid = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

配列の情報を取得する

配列の要素にアクセスする際は、 <配列名>[<引数>]で指定を行います。

print(numbers[0])  # → 1
print(strings[2]) # → "cherry"

print(grid[1][2]) # → 6(2行目の3列目)

size()で、配列のサイズ(要素数)を取得できます

print(my_array.size())  # → 配列の要素数を返す

要素の変更(上書き)

アクセスと同様、<配列名>[<引数>]で要素を指定し、代入を行うことで変更(上書き)が可能です。

numbers[1] = 10
print(numbers) # → [1, 10, 3, 4, 5]

要素の追加

append()で配列の末尾に、front() で配列の先頭に、それぞれ要素の追加が可能です。

var my_array = [1, 2, 3]
my_array.append(4) # 末尾に追加
print(my_array) # → [1, 2, 3, 4]

my_array.push_front(0) # 先頭に追加
print(my_array) # → [0, 1, 2, 3, 4]

要素の削除とポップ

erase()で値を、.remove_at() でインデックスを指定して要素の削除を実行できます。
※eraseは配列の先頭から指定要素の検索を行い、最初にヒットした1要素を削除することに注意

my_array.erase(2)  # 値「2」を指定して削除(先頭から検索してヒットした最初の要素のみ削除)
print(my_array) # → [0, 1, 3, 4]

my_array.remove_at(1) # インデックス1を指定して要素を削除
print(my_array) # → [0, 3, 4]

pop_back()で末尾、pop_front()で先頭の要素に対してポップ(※)操作を実行できます。

var last_value = my_array.pop_back()  # 末尾を削除&取得print(my_array)  # → [0, 3]print(last_value)  # → 4

var first_value = my_array.pop_front()  # 先頭を削除&取得print(my_array)  # → [3]print(first_value)  # → 0

 

検索と並び替え

検索

<検索値> in <配列>で、配列内に指定した要素(値)が存在するかを確認できます。

if 3 in my_array:
print("3 は指定した配列 array 内に含まれています"
)

find()では、指定した値のインデックスを取得できます。(見つからない場合は -1)
※find()は、先頭から検索を行い、最初に出現する位置のインデックスを返します。

var idx = my_array.find(3)  # 3のインデックスを取得(見つからない場合は -1)
print(idx) # → 1

並び替え

sort()では昇順で、 sort_custom()では指定した関数(※)によってソート処理が可能です。
※指定する関数は二つの配列要素を引数とし、最初の要素を 2 番目の要素の前に移動する必要がある場合はtrue、そうでなければfalseを返すように設定します。(falseの時、入れ替えが発生する)

var numbers = [5, 3, 1, 4, 2]
numbers.sort() # 昇順ソート
print(numbers) # → [1, 2, 3, 4, 5]

numbers.sort_custom(func(a, b): return a > b) # カスタムソート(降順ソートの例)
print(numbers) # → [5, 4, 3, 2, 1]

invert()では、配列要素の並び順を反転させることができます。

var numbers = [1, 2, 3, 4, 5]
numbers.invert()
print(numbers)  # → [5, 4, 3, 2, 1]

shuffle()で、配列内の要素をランダムな順番で並び替えることができます。

numbers.shuffle()
print(numbers) # → ランダムな順番になる

コピー

参照をコピーする場合は <変数> = <配列> で、
ディープコピーを行いたい場合は、 duplicate()を使用して新規配列を作成します。

参照コピーの例:

var array1 = [1, 2, 3]
var array2 = array1 # array2 は array1 の参照を持つ
array2[0] = 100
print(array1) # → [100, 2, 3](元の配列も変更される)

ディープコピーの例:

var array1 = [1, 2, 3]
var array2 = array1.duplicate() # 新しい配列を作成
array2[0] = 100
print(array1) # → [1, 2, 3](元の配列は影響を受けない)

ループ処理

配列は、インデックスでループ処理を行うほか、 in キーワードを使用することでも繰り返し処理の記述が可能です。

var numbers = [1, 2, 3, 4, 5]

# インデックス指定を使用する例
for i in numbers.size():
print("Index ", i, ": ", numbers[i])


# inキーワードによる指定を使用する例
for num in numbers:
print(num) # 1, 2, 3, 4, 5 を順番に出力

マッピングとフィルタリング

マッピング

map()では、配列の各要素に対して、指定した関数を実行し、その戻り値で新規配列を作成できます。
指定する関数は、配列の要素の1つを引数として受け取り、任意の値を返す形にします。

var numbers = [1, 2, 3, 4, 5]
var squared = numbers.map(func(n): return n * n)
print(squared) # → [1, 4, 9, 16, 25]

フィルタリング

filter()では、配列の各要素に対して、指定した関数を実行し、その戻り値がtrueとなる場合に要素を追加する形で、新規配列を作成します。
指定する関数は、配列の要素の1つを引数として受け取り、bool型の結果を返す形にします。
(引数となった要素を追加する場合は true 、除外する場合は false を返します)

var numbers = [1, 2, 3, 4, 5]
var even_numbers = numbers.filter(func(n): return n % 2 == 0)
print(even_numbers) # → [2, 4]

文字列への変換

String型のメソッド join() を使用することで、配列の各要素を一つの文字列型へと変換できます

var words = ["Hello", "World"]
var words_string = ",".join(words)
print(words_string) # → "Hello,World"

おわりに

この記事では、Godotでの配列の使い方について基本的な内容をまとめました。
ここで触れたのは比較的使用頻度の高いもののみのため、他の関連メソッドや用法・詳細につきましては、以下公式ドキュメントのページをご参照ください。

【参考】公式ドキュメントページ:

Array
A built-in data structure that holds a sequence of elements. Description: An array data structure that can contain a sequence of elements of any Variant type. E...

当ブログ関連ページ:

おすすめの本①
おすすめの本➁(Godot)
GodotEngine
ひらまめ(hiramame)をフォローする
ひらまめゲーム制作研究室

コメント

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