115 votes

Moyen le plus efficace pour déterminer si une table Lua est vide (ne contient aucune entrée) ?

Quel est le moyen le plus efficace pour déterminer si une table est vide (qui est, actuellement, ne contient ni de la matrice des valeurs de style, ni dict-valeurs de style)?

Actuellement, je suis en utilisant next():

if not next(myTable) then
    -- Table is empty
end

Est-il un moyen plus efficace?

Remarque: L' # opérateur ne suffit pas ici, car il ne fonctionne que sur le tableau de style des valeurs dans la table donc #{test=2} est impossible de distinguer #{} parce que les deux de retour de 0. Notez également que de vérifier si la variable tableau est nil ne suffit pas que je ne suis pas à la recherche pour le néant des valeurs, mais plutôt des tables avec 0 entrées (c - {}).

142voto

Norman Ramsey Points 115730

Votre code est efficace, mais mal. (Envisager `` .) Le code correct est

Pour une efficacité maximale, vous aurez envie de lier `` à une variable locale, par exemple,

1voto

0x6adb015 Points 1498

Une possibilité serait de compter le nombre d'éléments, à l'aide de la métatable "newindex". Lors de l'attribution de quelque chose de pas nil, incrémenter le compteur (le compteur pourraient vivre dans la métatable) et lors de l'affectation d' nil, décrémente le compteur.

De test pour la table vide serait de tester le compteur à 0.

Voici un pointeur vers métatable documentation

J'aime votre solution si, et honnêtement, je ne peut pas supposer que ma solution est plus rapide dans l'ensemble.

0voto

FichteFoll Points 81

C’est probablement ce que tu voulais :

Sortie :

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