script print for create lua lua-table

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.