2013-07-02 20 views
30

だから、私はこれらの線に沿ってテーブルの何かを持っている:それは彼らのインデックスに基づいてそれらにアクセスすることが可能ですようルアでテーブルを反復処理する方法は?

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]の両方を入力できるようにしたいと思っていますが、もちろん両者を同時に行う必要があります。

+1

これが失敗します。 {0、 'a'、 "red"、5}、 オレンジ= {1、 'o'、 "orange"、12}、 pears = {2、 'p'、 "green"、7}、 } '' '実例はhttp://ideone.com/yWKHx7で見ることができます。 –

+0

@KjellHedström私はOPの質問を編集し、軽微な構文エラーを修正しました。良いキャッチ。 – greatwolf

答えて

52

あなたが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 

を編集します.Luaはテーブルの関連部分の反復順序を保証しません。特定の順序で項目にアクセスする場合は、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 

出力:次いで、ソートキーを介しarrにアクセスする「」各アレイ行の間がない限り@greatwolfからの回答と

apples a red  5 
    oranges o orange 12 
    pears p green 7 
+0

ちょうど気づいた...それはなぜそれらを間違った順序で印刷するのですか?それを順番に印刷すると、テーブルのindex変数を省略して、索引を検索するために印刷する順序に依存するだけでよいでしょう。 –

+2

Luaはテーブルの連想部分の反復順序を保証しません。 – greatwolf

+1

@Lemony私は、特定の順序でテーブルをどのようにトラバースできるかの例を追加しました。 – greatwolf

8

複数のキーでネストした表を参照する場合は、それらを別個のキーに割り当てることができます。テーブルは複製されず、同じ値を参照します。

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 
関連する問題