180 votes

Comment obtenir le nombre d'entrées dans une table Lua?

Cela ressemble à une question "laissez-moi google pour vous", mais de toute façon je ne trouve pas de réponse. L'opérateur Lua # ne compte que les entrées avec des clés entières, de même que table.getn :

 tbl = {}
tbl["test"] = 47
tbl[1] = 48
print(#tbl, table.getn(tbl))   -- prints "1     1"

count = 0
for _ in pairs(tbl) do count = count + 1 end
print(count)            -- prints "2"
 

Comment puis-je obtenir le nombre de toutes les entrées sans les compter?

165voto

u0b34a0f6ae Points 14874

Vous avez déjà la solution de la question, le seul moyen est d'itérer l'ensemble de la table avec pairs(..).

function tablelength(T)
  local count = 0
  for _ in pairs(T) do count = count + 1 end
  return count
end

Aussi, notez que le "#" de l'opérateur définition est un peu plus compliqué que cela. Permettez-moi d'illustrer que la prise de cette table:

t = {1,2,3}
t[5] = 1
t[9] = 1

Selon le manuel, l'un de 3, 5 et 9 sont des résultats valides pour l' #t. La seule façon saine de l'utilisation, il est avec les tableaux d'une seule partie, sans nul valeurs.

23voto

ergosys Points 15343

Vous pouvez configurer une méta-table pour suivre le nombre d'entrées. Cela peut être plus rapide que l'itération si cette information est fréquemment nécessaire.

9voto

kikito Points 23229

Il y a un moyen, mais cela peut être décevant: utilisez une variable supplémentaire (ou un champ de la table) pour stocker le nombre, et augmentez-le chaque fois que vous effectuez une insertion.

 count = 0
tbl = {}

tbl["test"] = 47
count = count + 1

tbl[1] = 48
count = count + 1

print(count)   -- prints "2"
 

Il n'y a pas d'autre moyen, l'opérateur # ne travaillera que sur des tables de type tableau avec des clés consécutives.

-4voto

leandro moreira Points 52

Je pense que vous pouvez utiliser facilement #.

t = {1,2,3}

print(#t)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X