2017-01-30 10 views
4

Что я пытаюсь сделать, это отобразить содержимое таблицы, используя следующий код в Lua.Отображение содержимого таблиц в 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

Для отображения вложенных таблиц вам придется использовать вложенные циклы.

Кроме того, используйте ipairs перебирать массива -как таблицы и pairs перебирать записи -как таблицы.

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

 Смежные вопросы

  • Нет связанных вопросов^_^