script print for create lua lua-table

print - lua script table insert



¿Cómo eliminar todos los elementos en una tabla de Lua? (5)

¿Cómo elimino todos los elementos dentro de una tabla Lua? No quiero hacer

t = {} table.insert(t, 1) t = {} -- this assigns a new pointer to t

Quiero retener el mismo puntero a t, pero eliminar todos los elementos dentro de t .

Lo intenté:

t = {} table.insert(t, 1) for i,v in ipairs(t) do table.remove(t, i) end

¿Es válido lo anterior? ¿O se necesita algo más?


Elementos de la tabla insertar y eliminar el rendimiento comparar

El tamaño de la tabla cuenta 10000000

[1] while y rawset

while #t ~= 0 do rawset(t, #t, nil) end

tiempo pasado = 0,677220

[2] siguiente y rawset

for k in next, t do rawset(t, k, nil) end

tiempo pasado = 0,344533

[3] ipairs y rawset

for i, v in ipairs(t) do t[i] = nil end

tiempo pasado = 0.012450

[4] para, rawset

count = #t for i=0, count do t[i]=nil end

tiempo pasado = 0.009308

Insertar tabla elemnets

[1] función de inserción de tabla

for i=0, 10000000 do table.insert(t, i, i) end

tiempo pasado = 1.0590489

[2] usa #t

for i=0, 10000000 do t[#t+1] = i end

tiempo empleado = 0,703731

[3] para, rawset

for i=0, 10000000 do rawset(t, i, i) end

tiempo pasado = 0.100010

resultado.

Eliminación más rápida: 4

La inserción más rápida: 3


Más fácil y con más rendimiento:

for k,v in pairs(tab) do tab[k]=nil end

Lo que sugiere no es utilizable: table.remove desplaza los elementos restantes para cerrar el agujero y, por lo tanto, desordena el recorrido de la tabla. Vea la descripción de la siguiente función para más información.


Para una versión más rápida que ignora el __pairs __pairs:

local next = next local k = next(tab) while k ~= nil do tab[k] = nil k = next(tab, k) end

EDITAR: Como @siffiejoe menciona en los comentarios, esto puede simplificarse nuevamente en un bucle for reemplazando la llamada de pairs con su valor de retorno predeterminado para las tablas: el next método y la tabla en sí. Además, para evitar todos los metamétodos, use el método rawset para la asignación de índice de tabla:

for k in next, tab do rawset(tab, k, nil) end


#table es el tamaño de la tabla y si t = {1,2,3} entonces #t = 3

Así que puedes usar este código para eliminar los elementos.

while #t ~= 0 do rawset(t, #t, nil) end

Recorrerá la tabla, eliminará cada elemento y obtendrá una tabla vacía al final.


for k in pairs (t) do t [k] = nil end

También funcionará: es posible que tenga dificultades con ipairs si la tabla no se utiliza como una matriz en todo.