script print for create lua lua-table

print - lua script table insert



¿Cuál es la diferencia entre `table.insert(t, i)` y `t[# t+1]=i` (4)

insert puede insertarse arbitrariamente (como su nombre indica), solo se predetermina a #t + 1 , donde como t[#t + 1] = i siempre se añadirá a la tabla (final de). ver la sección 5.5 en el manual de lua .

En lua, parece haber dos formas de agregar un elemento a una matriz:

table.insert(t, i)

y

t[#t+1] = i

¿Qué debería usar y por qué?


Cuál usar es una cuestión de preferencia y circunstancia: como el operador # length se introdujo en la versión 5.1, t[#t+1] = i no funcionará en Lua 5.0, mientras que table.insert ha estado presente desde 5.0 y funcionará en ambos. Por otro lado, t[#t+1] = i utiliza exclusivamente operadores de nivel de lenguaje, mientras que table.insert implica una función (que tiene una pequeña cantidad de sobrecarga para buscar y llamar y depende del módulo de table en el entorno )

En la segunda edición de Programación en Lua (una actualización de la primera edición orientada a Lua 5.0), Roberto Ierusalimschy (el diseñador de Lua) afirma que prefiere t[#t+1] = i , ya que es más visible.

Además, dependiendo de su caso de uso, la respuesta puede ser "ninguno". Consulte la entrada manual sobre el comportamiento del operador de longitud :

Si la matriz tiene "agujeros" (es decir, valores nulos entre otros valores no nulos), entonces #t puede ser cualquiera de los índices que precede directamente a un valor nulo (es decir, puede considerar cualquier valor nulo como el final de la matriz).

Como tal, si se trata de una matriz con agujeros, usar cualquiera de los dos ( table.insert utiliza el operador de longitud ) puede "agregar" su valor a un índice más bajo de la matriz del que desee. Cómo se define el tamaño de su matriz en este escenario depende de usted y, de nuevo, depende de las preferencias y las circunstancias: puede usar table.maxn (desapareciendo en 5.2 pero trivial para escribir), puede mantener un n campo en el tabla y actualizarlo cuando sea necesario, puede envolver la tabla en un metatabla, o podría usar otra solución que se adapte mejor a su situación (en un bucle, un local tsize en el alcance inmediatamente fuera del bucle a menudo será suficiente).


Lo siguiente es ligeramente divertido, pero posiblemente con un grano de estética. Aunque hay razones obvias para que mytable: operation () no se suministre como mystring: operation (), uno puede rodar fácilmente su propia variante y obtener una tercera notación si lo desea.

Table = {} Table.__index = table function Table.new() local t = {} setmetatable(t, Table) return t end mytable = Table.new() mytable:insert(''Hello'') mytable:insert(''World'') for _, s in ipairs(mytable) do print(s) end


El operador ''#'' solo usa la tabla de clave indexada.

t = {1, 2 ,3 ,4, 5, x=1, y=2}

en el código anterior

print(#t) --> print 5 not 7

''#'' operador siempre que no se use.

Si desea el operador ''#'', luego verifique que el tipo de elementos de la tabla.

La función de inserción puede usar cualquier tipo de uso. Sin embargo, el conteo de elementos para trabajar más lento que ''#''