2017-07-17 5 views
1

初心者Lua quesiton - 私はちょうどルアを学んでいます。そして、いくつかのコード、行と列を持つテーブルのようなものを作成するネストしたテーブルを書きました。ネストされたLuaテーブルの印刷が順調に進まないのはなぜですか?

ただし、ペア()を使用してテーブルを反復すると、同じ順序で出力されません。シリアル、サービスデー、Connectedに入れて、サービスデー、シリアル、接続。私は理由を理解することに迷っています。私は意図的に私はちょうど...学習とLuaのテーブルを扱うさまざまな方法で快適な取得しようとしていることから、3行の異なる方法で作成した

コード: mytableは= {}

myTable["headerRow"] = { 
    Serial = "Serial", 
    ServDays = "Service Days", 
    Connected = "Connected" } 
myTable[1] = { 
    Serial = "B9FX", 
    ServDays = 7, 
    Connected = true } 
myTable[2] = {} 
myTable[2]["Serial"] = "2SHA" 
myTable[2]["ServDays"] = 3 
myTable[2]["Connected"] = true 

for k, v in pairs(myTable) do 
    for k2, v2 in pairs(v) do 
     io.write(tostring(v2),",") 
    end 
    io.write("\n") --End the row 
end 

結果:

c:\lua>lua53 primer.lua 
7,B9FX,true, 
3,2SHA,true, 
Service Days,Serial,Connected, 

答えて

3

のペアは、次の機能を使用します。したがって、対の反復子を使用する包括的なforループにおけるトラバースの順序は不特定である。インデックスが列挙される順序をも 数値指標のために、指定されていない

https://www.lua.org/manual/5.3/manual.html#pdf-next

:Luaのリファレンスマニュアルから

トラバーサル中に、 にテーブルの存在しないフィールドに値を割り当てると、nextの動作は未定義です。ただし、 の既存のフィールドを変更することはできます。特に、既存のフィールドをクリアすることができます。あなたはこのような何かを行う場合は

myTable[2] = {} 
myTable[2]["Serial"] = "2SHA" 
myTable[2]["ServDays"] = 3 
myTable[2]["Connected"] = true 

Luaはここでは、テーブルのキーに値をasigned注文覚えていないだろう。キーだけを値にマップします。

関連する問題