2012-02-18 8 views
-1

私はluaでプログラムを書いています。私は、次のように編成されたデータがあります。データの各グループが2つの変数I & Pによってインデックスされる別の方法でこのようなテーブルのデータにアクセスする方法は?

t= { 
    i1 = { 
     p1 = { value = "i1p1" }, 
     p2 = { value = "i1p2" }, 
     -- etc 
     pm = { value = "i1pm" } 
    }, 
    i2 = { 
     p1 = { value = "i2p1" }, 
     p2 = { value = "i2p2" }, 
     -- etc 
     pm = { value = "i2pm" } 
    }, 
    im = { 
     p1 = { value = "imp1" }, 
     p2 = { value = "imp2" }, 
     -- etc 
     pm = { value = "impm" } 
    } 
} --(inner tables) 

を、私は、データが正常に保たれていることを確信しているが、私は道を印刷しますデータをテーブルから取り除くためには、iとpの値を繰り返して調べる必要があります。数字は&です。どのようにしてもluaでこれを行う方法は分かりますか?あなたは、ネストされた(内部の)テーブルの深さを知っている場合

+0

あなたが求めていることを理解するのが難しいです。あなたがしようとしていることをより明確にするためにあなたの質問を再編成できますか? –

+1

ショートカット表記 'f {} == f({})'を使ってたくさんの関数呼び出しを見ています...あなたのサンプルコードを正しいものにして、正しくフォーマットしようとするかもしれません。 – jpjacobs

答えて

1

、あなたはその深さに明示的に反復することができます。

function print_tbl(tbl) 
    if type(tbl) == "table" then 
     for _,v in pairs(tbl) do 
      print_tbl(v) 
     end 
    else 
     print(tbl) 
    end 
end 

print_tbl(t) 

for k1,v1 in pairs(t) do 
    for k2,v2 in pairs(v1) do 
     for k3, v3 in pairs(v2) do 
      print(k3, ":", v3) 
     end 
    end 
end 

また、あなたが再帰的に自分の入れ子構造に繰り返すことができますこれは単なる例です。テーブルに関数が含まれている場合、ユーザーデータが含まれている場合、または入れ子にサイクルがある場合は、別の方法が必要です。 Luaユーザwikiのtable serializationを見てください。シリアライゼーションには、ネスト、関数、サイクルなどのテーブルの分かりやすい処理が必要です。データで学んだ教訓を使用することができます。

関連する問題