Lua 配列
配列とは、同じデータ型の要素が一定の順序で並べられた集合であり、1次元配列や多次元配列にすることができます。
Luaでは、配列は特定のデータ型ではなく、一連の値を格納するためのデータ構造です。
実際には、Luaには専用の配列型はなく、"table"というデータ構造を使用して配列の機能を実装しています。
Luaの配列のインデックスキーは整数で表すことができ、配列のサイズは固定ではありません。
Luaではインデックス値は1が開始値ですが、0から始めるように指定することもできます。
1次元配列
1次元配列は最も単純な配列で、その論理構造は線形リストです。
インデックスを使用して配列要素にアクセスします:
例
local myArray = {10, 20, 30, 40, 50}
-- 配列要素にアクセス
print(myArray[1]) -- 10 を出力
print(myArray[3]) -- 30 を出力
上記のコードを実行した出力結果は次のとおりです:
10 30
配列の長さ(配列内の要素数)を計算するには、#演算子を使用できます:
例
-- 配列の長さを計算
local length = #myArray
print(length) -- 5 を出力
上記のコードを実行した出力結果は次のとおりです:
5
1次元配列はforループで配列内の要素を出力できます。次の例のとおりです:
例
local myArray = {10, 20, 30, 40, 50}
-- ループで配列を走査
for i = 1, #myArray do
print(myArray[i])
end
上記のコードを実行した出力結果は次のとおりです:
10 20 30 40 50
Luaのインデックスはデフォルトで1から始まります:
例
for i= 0, 2 do
print(array[i])
end
上記のコードを実行した出力結果は次のとおりです:
nil Lua Tutorial
ご覧のとおり、整数インデックスを使用して配列要素にアクセスできます。指定したインデックスに値がない場合はnil。
さらに、負の数を配列のインデックス値として使用することもできます:
例
for i= -2, 2 do
array[i] = i *2
end
for i = -2,2 do
print(array[i])
end
上記のコードを実行した出力結果は次のとおりです:
-4 -2 0 2 4
配列内の要素を変更することもできます:
例
local myArray = {10, 20, 30, 40, 50}
-- 配列要素を変更
myArray[2] = 25
-- ループで配列を走査
for i = 1, #myArray do
print(myArray[i])
end
上記のコードを実行した出力結果は次のとおりです:
10 25 30 40 50
配列に要素を追加することもできます:
例
local myArray = {10, 20, 30, 40, 50}
-- 配列の末尾に新しい要素を追加
myArray[#myArray + 1] = 60
-- ループで配列を走査
for i = 1, #myArray do
print(myArray[i])
end
上記のコードを実行した出力結果は次のとおりです:
10 20 30 40 50 60
配列内の要素を削除することもできます:
例
local myArray = {10, 20, 30, 40, 50}
-- 3番目の要素を削除
table.remove(myArray, 3)
-- ループで配列を走査
for i = 1, #myArray do
print(myArray[i])
end
上記のコードを実行した出力結果は次のとおりです:
10 20 40 50
多次元配列
多次元配列とは、配列内に配列が含まれるもの、または1次元配列のインデックスキーが配列に対応するものです。
以下は3行3列の多次元配列です:
例
array = {}
for i=1,3 do
array[i] = {}
for j=1,3 do
array[i][j] = i*j
end
end
-- 配列にアクセス
for i=1,3 do
for j=1,3 do
print(array[i][j])
end
end
上記のコードを実行した出力結果は次のとおりです:
1 2 3 2 4 6 3 6 9
異なるインデックスキーを持つ3行3列の多次元配列:
例
array = {}
maxRows = 3
maxColumns = 3
for row=1,maxRows do
for col=1,maxColumns do
array[row*maxColumns +col] = row*col
end
end
-- 配列にアクセス
for row=1,maxRows do
for col=1,maxColumns do
print(array[row*maxColumns +col])
end
end
上記のコードを実行した出力結果は次のとおりです:
1 2 3 2 4 6 3 6 9
ご覧のとおり、上記の例では、配列に指定したインデックス値を設定しているため、nil値の発生を回避でき、メモリ容量の節約に役立ちます。
その他の拡張