web-dev-qa-db-fra.com

Afficher le contenu des tableaux dans lua

Ce que j'essaie de faire est d'afficher le contenu de la table en utilisant le code suivant dans 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

La sortie que j'ai obtenue est:

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

Pour afficher les tables imbriquées, vous devrez utiliser des boucles imbriquées.

En outre, utilisez ipairs pour parcourir les tableaux - semblables à des tableaux, et pairs pour parcourir les tables de type enregistrement .

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

Production:

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  
12
Oka

Cela sérialise récursivement une table. Une variante de ce code peut être utilisée pour générer du JSON à partir d'une table.

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

exécuter votre table à travers ceci:

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

génère ceci:

  {
  [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",
    },
}
8
Luiz Menezes

Si vous avez des noms de champs prédéfinis statiques dans vos enregistrements de données, cette version plus simple peut fonctionner pour vous:

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

Je ne sais pas de quoi IDE vous travaillez. Mais pour une raison quelconque, vous et toute autre personne qui trouve ce fil, travaillez dans Visual Studio Code, le Lua Debug extension fera un excellent travail en affichant toutes vos valeurs de tableau associatif pour les tables personnalisées que vous créez.

Ce que j'aime vraiment, c'est que vous pouvez afficher non seulement vos valeurs initiales, mais si vous décidez de modifier une valeur plus tard, vous pouvez le faire avec cette extension et voir vos ajustements, tout au long de l'onglet "Debug Console".

J'ai pris votre exemple exact, et j'ai simplement tapé des personnes dans le débogage, et aller toutes les valeurs affichées.

0
klewis