2017-01-30 4 views
4

Ich versuche, den Inhalt der Tabelle mit dem folgenden Code in Lua anzuzeigen.Inhalt der Tabellen in lua anzeigen

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 

Der Ausgang was ich habe ist:

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

Antwort

8

verschachtelte Tabellen Zur Anzeige werden Sie verschachtelte Schleifen verwenden.

Verwenden Sie auch ipairs durch Array -ähnlichen Tabellen iterieren und pairs durch Rekord -ähnlichen Tabellen iterieren.

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 

Ausgang:

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

** Danke so sehr. Es war sehr hilfreich ** – Neenu

4

Diese serialisiert rekursiv eine Tabelle. Eine Variante dieses Codes kann verwendet werden, um JSON aus einer Tabelle zu generieren.

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 

läuft Tisch durch diese:

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)) 

erzeugt dies:

{ 
    [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

Wenn Sie statische vordefinierte Feldnamen in Ihren Datensätzen haben, diese einfachere Version für Sie arbeiten kann:

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

Dies hat den Vorteil, dass Sie die Reihenfolge wählen können, in der die Felder angezeigt werden. – lhf