だから、こんな感じのテーブルがあるんです:
arr =
{
apples = { 'a', "red", 5 },
oranges = { 'o', "orange", 12 },
pears = { 'p', "green", 7 }
}
インデックスを元にアクセスするのは無理そうだし、値自体もテーブルなので、入れ子になっているテーブルの最初の値をインデックスにしただけなので、今はこんな感じになっています:
arr =
{
apples = { 0, 'a', "red", 5 },
oranges = { 1, 'o', "orange", 12 },
pears = { 2, 'p', "green", 7 }
}
そこで、これらのテーブルのいずれかを使用するときは、インデックスが何であるかを知っていますが、インデックスを使用してテーブルに到達することはできません。そこで、すべてのテーブルをループして、正しいものを見つけるまでインデックスをチェックする関数を作成し始めました。そこで、すべてのテーブルをループして、正しいテーブルを見つけるまでインデックスをチェックする関数を書こうと考えました。だから、今、私は困っている。arr.applesとarr[1]の両方を入力できるようにしたいのですが、もちろん両方を入力する必要がある場合もあります。
テーブル内のすべてのキーと値のペアを反復処理するには、pairs
を使用することができます:
for k, v in pairs(arr) do
print(k, v[1], v[2], v[3])
end
を出力することができます:
pears 2 p green
apples 0 a red
oranges 1 o orange
Edit:なお、Luaはテーブルの連想部分の繰り返し順序を保証していません。もし、特定の順序でアイテムにアクセスしたい場合は、arr
からキーを取り出してソートします。そして、ソートされたキーを介して arr
にアクセスする:
local ordered_keys = {}
for k in pairs(arr) do
table.insert(ordered_keys, k)
end
table.sort(ordered_keys)
for i = 1, #ordered_keys do
local k, v = ordered_keys[i], arr[ ordered_keys[i] ]
print(k, v[1], v[2], v[3])
end
という出力が得られます:
apples a red 5
oranges o orange 12
pears p green 7
入れ子になったテーブルを複数のキーで参照したい場合は、別々のキーに割り当てればよい。テーブルが重複することなく、同じ値を参照することができます。
arr = {}
apples = {'a', "red", 5 }
arr.apples = apples
arr[1] = apples
このコードブロックでは、テーブル内のすべてのキーと値のペアを反復処理することができます (http://lua-users.org/wiki/TablesTutorial):
for k,v in pairs(t) do
print(k,v)
end