web-dev-qa-db-fra.com

Comment puis-je obtenir le nombre de clés dans une table de hachage à Lua?

myTable = {}
myTable["foo"] = 12
myTable["bar"] = "blah"
print(#myTable) -- this prints 0

Dois-je réellement itérer à travers les articles de la table pour obtenir le nombre de clés?

numItems = 0
for k,v in pairs(myTable) do
    numItems = numItems + 1
end
print(numItems) -- this prints 2
42
Jay

J'ai expérimenté à la fois l'opérateur # et la table.getn (). Je pensais que table.getn () ferait ce que tu voulais, mais comme il s'avère, il renvoie la même valeur que #, à savoir 0. Il apparaît que des dictionnaires inséraient des espaces réservés nul.

Looping sur les clés et les compter semble être le seul moyen d'obtenir la taille du dictionnaire.

21
Aaron Saarela

l'opérateur de longueur :

La longueur d'un tableau T est définie comme un indice entier N telle que t [n] n'est pas nul et t [n + 1] est nul; De plus, si t [1] est nul, n peut être zéro. Pour une matrice régulière, avec des valeurs non nulles de 1 à une n, sa longueur est exactement que n, l'index de sa dernière valeur. Si la matrice a des "trous" (c'est-à-dire des valeurs nules entre d'autres valeurs non nules), alors #t peut être l'un des indices qui précède directement une valeur nul (c'est-à-dire qu'il peut considérer une telle valeur nul comme la fin de la fin. de la matrice).

donc, seuls le moyen de faire la longueur est itérale dessus.

7
serioys sam

Lua stocke Table sous la forme de deux parties séparations: une partie de hachage et une pièce de tableau, l'opérateur LEN ne traite que la partie de réseau, de la valeur indiquée par une valeur de numéro, plus en utilisant des règles mentionnées ci-dessous, de sorte que vous n'avez pas le choix pour le comptage. "Hash" de valeur dont vous avez besoin pour itérer sur la table avec paires () fonction.

1
Faylixe