2017-01-30 18 views
4

私がやっていることは、Luaの次のコードを使ってテーブルの内容を表示することです。ルアのテーブル内容を表示

local people = { 
    { 
    name = "Fred", 
    address = "16 Long Street", 
    phone = "123456" 
    }, 

    { 
    name = "Wilma", 
    address = "16 Long Street", 
    phone = "123456" 
    }, 

    { 
    name = "Barney", 
    address = "17 Long Street", 
    phone = "123457" 
    } 

} 
for k, v in pairs(people) do 
    print(k, v) 
end 

私が得た出力は次のようになります。

1 table: 0x9a2d8b0 
2 table: 0x9a2d110 
3 table: 0x9a2cb28 

答えて

8

あなたがネストされたループを使用する必要がありますネストした表を表示します。

また、レコード様テーブルを反復処理するためにアレイ様テーブル、及びpairsを反復処理するipairsを使用します。

local people = { 
    { 
     name = "Fred", 
     address = "16 Long Street", 
     phone = "123456" 
    }, 
    { 
     name = "Wilma", 
     address = "16 Long Street", 
     phone = "123456" 
    }, 
    { 
     name = "Barney", 
     address = "17 Long Street", 
     phone = "123457" 
    } 
} 

for index, data in ipairs(people) do 
    print(index) 

    for key, value in pairs(data) do 
     print('\t', key, value) 
    end 
end 

出力:

1 
     phone 123456   
     name Fred    
     address 16 Long Street   
2 
     phone 123456   
     name Wilma   
     address 16 Long Street   
3 
     phone 123457   
     name Barney   
     address 17 Long Street 
+0

**ありがとう本当に役に立ちました** – Neenu

4

これは再帰的にテーブルをシリアライズ。このコードの変形を使用して、テーブルからJSONを生成することができます。

これを通して、あなたのテーブルを実行している
function tprint (tbl, indent) 
    if not indent then indent = 0 end 
    local toprint = string.rep(" ", indent) .. "{\r\n" 
    indent = indent + 2 
    for k, v in pairs(tbl) do 
    toprint = toprint .. string.rep(" ", indent) 
    if (type(k) == "number") then 
     toprint = toprint .. "[" .. k .. "] = " 
    elseif (type(k) == "string") then 
     toprint = toprint .. k .. "= " 
    end 
    if (type(v) == "number") then 
     toprint = toprint .. v .. ",\r\n" 
    elseif (type(v) == "string") then 
     toprint = toprint .. "\"" .. v .. "\",\r\n" 
    elseif (type(v) == "table") then 
     toprint = toprint .. tprint(v, indent + 2) .. ",\r\n" 
    else 
     toprint = toprint .. "\"" .. tostring(v) .. "\",\r\n" 
    end 
    end 
    toprint = toprint .. string.rep(" ", indent-2) .. "}" 
    return toprint 
end 

local people = { 
    { 
    name = "Fred", 
    address = "16 Long Street", 
    phone = "123456" 
    }, 

    { 
    name = "Wilma", 
    address = "16 Long Street", 
    phone = "123456" 
    }, 

    { 
    name = "Barney", 
    address = "17 Long Street", 
    phone = "123457" 
    } 

} 


print (tprint(people)) 

はこれを生成します。

{ 
    [1] =  { 
     name= "Fred", 
     phone= "123456", 
     address= "16 Long Street", 
    }, 
    [2] =  { 
     name= "Wilma", 
     phone= "123456", 
     address= "16 Long Street", 
    }, 
    [3] =  { 
     name= "Barney", 
     phone= "123457", 
     address= "17 Long Street", 
    }, 
} 
4

あなたのデータレコードで定義済みの静的なフィールド名を持っている場合は、この簡単なバージョンがあなたのために働く可能性があります。

for i,t in ipairs(people) do 
    print('Record',i) 
    print('Name',t.name) 
    print('Address',t.address) 
    print('Phone',t.phone) 
    print() 
end 
+3

これは、フィールドが表示される順番を選択できるという利点があります。 – lhf

関連する問題