1. ホーム
  2. スクリプト・コラム
  3. ルア

Luaにおける配列の概念の説明

2022-02-10 01:25:51

 配列は順序付けられたオブジェクトの装置であり、行の集まりを含む単一の2次元配列や、複数の行と列を持つ多次元配列があります。

Luaでは、配列は整数によるインデックス・テーブルを使って実装されています。配列のサイズは固定ではなく、メモリに制約される必要性に基づいて大きくすることができます。
一次元配列

一次元配列は単純なテーブル構造で表すことができ、単純なforループで初期化、読み込みが可能です。これは以下の例で示されています。

コピーコード コードは以下の通りです。
array = {"Lua", "Tutorial"}

for i= 0, 2 do
   print(array[i])
end

上記のコードを実行すると、次のような出力が得られます。

コピーコード コードは以下の通りです。
nil
Lua
Tutorial

上のコードでわかるように、インデックスが存在しない配列の要素にアクセスしようとすると、nilが返されます。Luaでは通常、インデックスは1から始まりますが、インデックス0や0未満のオブジェクトを作成することも可能です。以下、負のインデックスを持つ配列の使い方を示します。配列はforループで初期化します。

コピーコード コードは以下の通りです。
array = {}

for i= -2, 2 do
   array[i] = i * 2
end

for i = -2,2 do
   print(array[i])
end

上記のコードを実行すると、次のような出力が得られます。

コピーコード コードは以下の通りです。
-4
-2
0
2
4

多次元配列

多次元配列は、2つの方法で実装することができます。

  1.     配列の配列
  2.     制御インデックスによる一次元配列

3,3多次元配列の場合、配列を用いた例を以下に示します。

コピーコード コードは以下の通りです。
-- Initializing the array
array = {}
for i=1,3 do
   array[i] = {}
      for j=1,3 do
         array[i][j] = i*j
      end
end

-- Accessing the array
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 の多次元配列の例では、以下のように演算インデックスを使用します。

コピーコード コードは以下の通りです。
-- Initializing the array
array = {}
maxRows = 3
maxColumns = 3
for row=1,maxRows do
   for col=1,maxColumns do
      array[row*maxColumns +col] = row*col
   end
end

-- Accessing the array
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

上の例でわかるように、データはインデックスに基づいて格納されます。また、要素をスパースに置くことができます。これは、luaが実装されている方法で動作するマトリックスです。Luaでは0値を保存しないので、他のプログラミング言語が特殊なテクニックを使うのに比べ、Luaではどんな特殊なテクニックでも多くのメモリを節約することが可能です。