print - La forma más eficiente de determinar si una tabla Lua está vacía(no contiene entradas)
lua script table insert (5)
Esto es probablemente lo que querías:
function table.empty (self)
for _, _ in pairs(self) do
return false
end
return true
end
a = { }
print(table.empty(a))
a["hi"] = 2
print(table.empty(a))
a["hi"] = nil
print(table.empty(a))
Salida:
true
false
true
¿Cuál es la forma más eficiente de determinar si una tabla está vacía (es decir, actualmente no contiene valores de estilo de matriz ni valores de estilo dict)?
Actualmente, estoy usando next()
:
if not next(myTable) then
-- Table is empty
end
¿Hay una manera más eficiente?
Nota: El operador #
no es suficiente aquí, ya que solo opera en los valores de estilo de matriz en la tabla, por lo que #{test=2}
se puede distinguir de #{}
porque ambos devuelven 0. También tenga en cuenta que se verifica si la variable de tabla es nil
no es suficiente ya que no estoy buscando valores nulos, sino más bien tablas con 0 entradas (es decir {}
).
Intenta usar #
. Devuelve todas las instancias que están en una tabla. Si no hay instancias en una tabla, entonces devuelve 0
if #myTable==0 then
print(''There is no instance in this table'')
end
Sé que esto es viejo, y podría estar malentendiéndote de alguna manera, pero solo quieres que la mesa esté vacía, es decir, a menos que solo estés comprobando si lo está y si realmente no quieres o necesitas que esté vacío, puedes borrarlo simplemente recreándolo, a menos que esté equivocado. esto se puede hacer con la sintaxis siguiente.
yourtablename = {} -- this seems to work for me when I need to clear a table.
Tu código es eficiente pero incorrecto (Considera {[false]=0}
.) El código correcto es
if next(myTable) == nil then
-- myTable is empty
end
Para obtener la máxima eficacia, querrá enlazar al next
de una variable local, por ejemplo,
...
local next = next
...
... if next(...) ...
Una posibilidad sería contar el número de elementos, utilizando la clave metatable "newindex". Cuando asigne algo que no sea nil
, incremente el contador (el contador también podría vivir en el metatabla) y cuando asigne nil
, disminuya el contador.
La prueba de la tabla vacía sería probar el contador con 0.
Aquí hay un puntero a la documentación metatable
Sin embargo, me gusta su solución, y honestamente no puedo suponer que mi solución sea más rápida en general.