2014-12-11 12 views
9

Sto cercando di capire l'equivalente di:Come posso aggiungere a una tabella in Lua

foo = [] 
foo << "bar" 
foo << "baz" 

Io non voglio avere a venire con un indice di incremento. C'è un modo semplice per farlo?

+6

L'intera documentazione è disponibile all'indirizzo http://www.lua.org/manual/5.2/ – rsethc

+1

oh questo è davvero utile. Google continuava a indicarmi http://www.lua.org/pil/2.5.html che è fondamentalmente inutile. – drewish

risposta

9

Si sta cercando la funzione insert, trovata nella sezione table della libreria principale.

foo = {} 
table.insert(foo, "bar") 
table.insert(foo, "baz") 
+0

Ah sì: foo = {}; table.insert (foo, "bar"); table.insert (foo, "baz") – drewish

+1

Accidenti, hai risposto usando la funzione 'insert' mentre stavo scrivendo la mia risposta. *Grandi menti pensano allo stesso modo*. :-) – cybermonkey

+0

Esattamente. Non hai nemmeno bisogno del punto e virgola, ma puoi averli se lo desideri. – rsethc

15
foo = {} 
foo[#foo+1]="bar" 
foo[#foo+1]="baz" 

questo funziona perché l'operatore # calcola la lunghezza della lista. La lista vuota ha lunghezza 0, ecc

Se si utilizza Lua 5.3+, allora si può fare quasi esattamente quello che volevi:

foo = {} 
setmetatable(foo, { __shl = function (t,v) t[#t+1]=v end }) 
_= foo << "bar" 
_= foo << "baz" 

espressioni non sono dichiarazioni in Lua e hanno bisogno di essere usato in qualche modo.

+0

Spiega perché il tuo metodo funziona .. – cybermonkey

+0

Non sono innamorato di come sembra ma è bello sapere che funziona. – drewish

+2

È leggermente più veloce di 'table.insert'. – Tim

1

io personalmente faccio uso della funzione table.insert:

table.insert(a,"b") 

In questo modo si evita di dover iterare l'intera tabella quindi risparmio di risorse preziose come la memoria e il tempo.