2016-05-15 7 views
2
--The view of the table 
local originalStats = { 
    Info = {Visit = false, Name = "None", Characters = 1}, 
    Stats = {Levels = 0, XP = 0, XP2 = 75, Silver = 95}, 
    Inventory = { 
     Hats = {"NoobHat"}, 
     Robes = {"NoobRobe"}, 
     Boots = {"NoobBoot"}, 
     Weapons = {"NoobSword"} 
     } 
    } 
local tempData = {} 

--The arrangement here 
function Module:ReadAll(player) 
    for k,v in pairs(tempData[player]) do 
    if type(v) == 'table' then 
     for k2, v2 in pairs(v) do 
      print(k2) print(v2) 
      if type(v2) == 'table' then   
       for k3, v3 in pairs(v2) do 
        print(k3) print(v3) 
       end 
      else 
       print(k2) print(v2) 
      end 
     end 
    else 
     print(k) print(v) 
    end 
    end 
end 

私は申し訳ありませんが、この「ReadAll」機能を正しい順序ですべての正しい統計情報を表示する場所に配置する方法がわかりません。 。このテーブルの配置を理解できません

Boots 
table: 1A73CF10 
1 
NoobBoot 
Weapons 
table: 1A7427F0 
1 
NoobSword 
Robes 
table: 1A743D50 
1 
NoobRobe 
Hats 
table: 1A73C9D0 
1 
NoobHat 
XP2 
75 
XP2 
75 
Levels 
2 
Levels 
2 
XP 
0 
XP 
0 
+0

「正しい順序で」を意味しますか?どのような順序が正しいですか?希望の出力は何ですか? –

+0

私はinfo、stats、hats、robes、boots、weaponsのすべての値を同じ値を繰り返して出力したいのですが、どうすればいいですか?私は数時間それをテストするが、それは私が持っているすべてです。 –

+0

入力テーブル(tempData [player])と取得したい出力の例を挙げてください。 –

答えて

0

は、テーブルのフィールドには、いくつかの特定の順序でpairs()で反復されることを期待しないでください: 出力は次のようなものです。内部的には、Luaテーブルはハッシュテーブルであり、その中のフィールドの順序はまったく指定されていません。それは実行の間に変更されます、あなたはそれらが満たされたのと同じ順序でそれらを反復させることはできません。
連続した整数インデックスを持つ配列だけが要素の順序を維持します。

+0

これが不可能な場合は、テーブルをデータストアからロードするときにどのようにテーブルを戻すのか、どうすればいいでしょうか? –

+0

あなたが持っているものをロードするだけで、正確なロード順序は重要ではありません。既知の名前と期待される内容のフィールドを持つことが重要です。 – Vlad

+0

私は答えを投稿しましたが、私が次のことで注文が変わるのではないかと疑問に思っていましたか? 温度= {} ORIG = {情報= {訪問= falseの場合、名前= 'なし'}、 インベントリ= {ハット= { '基本'}、 ローブ= { '基本'} }} 温度= Orig - Orig値をTempに移動すると、順序が変わりますか?どうすればコードを保存して読み込むのですか? –

1

ここには、ダブルまたはテーブル参照値が表示されないすべての要素を表示する方法があります。 名前が示すように、この関数は、内部にいくつのネストした表があるかにかかわらず、表内のすべての要素を出力します。現時点で注文する方法はありませんが、方法を見つけたら回答を更新します。あなたはまた、プリントラインの空のスペースを取り除くことができます、私はちょうどそれがきれいに見えるようにそれを使用しました。それが動作するかどうか私に教えてください。

function allElementsInTable(table) 
    for k,v in pairs(table) do 
     if type(table[k]) == 'table' then 
      print(k .. ":") 
      allElementsInTable(v) 
     else 
      print(" " .. k .. " = " .. tostring(v)) 
     end 
    end 
end 

--place the name of your table in the parameter for this function 
allElementsInTable(originalStats) 
1

もっと実験した後、誰かが望むなら、私はこれを手に入れました。

tempData = { Info = {Visit = false, Name = 'None'}, 
    Stats = {LVL = 0, XP = 0, Silver = 75}, 
    Inventory = { Armors = {'BasicArmor'}, 
    Weapons = {'BasicSword'} } 

    } 


    function Read() 
    for i, v in pairs(tempData['Info']) do 
    print(i..'\t',v) 
    end 
    ---------- 
    for i2, v2 in pairs(tempData['Stats']) do 
    print(i2..'\t',v2) 
    end 
    ---------- 
    for i3, v3 in pairs(tempData['Inventory']) do 
    print(i3..':') 
    for i4, v4 in pairs(v3) do 
     print('\t',v4) 
    end 
    end 
    end 

    Read() 
関連する問題