この記事では、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での配列の使い方について基本的な内容をまとめました。
ここで触れたのは比較的使用頻度の高いもののみのため、他の関連メソッドや用法・詳細につきましては、以下公式ドキュメントのページをご参照ください。
【参考】公式ドキュメントページ:
当ブログ関連ページ:
コメント