2014-12-11 21 views
9

Próbuję dowiedzieć się równowartość:Jak mogę dołączyć do tabeli w Lua

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

nie chcę mieć wymyślić indeksu zwiększany. Czy istnieje prosty sposób na zrobienie tego?

+6

Cała dokumentacja jest dostępna pod adresem http://www.lua.org/manual/5.2/ – rsethc

+1

o, to naprawdę pomocne. google ciągle wskazywał mi stronę http://www.lua.org/pil/2.5.html, która jest w zasadzie bezużyteczna. – drewish

Odpowiedz

9

Szukasz funkcji insert, znajdującej się w sekcji głównej biblioteki o numerze table.

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

Ach tak: foo = {}; table.insert (foo, "bar"); table.insert (foo, "baz") – drewish

+1

Cholera, odpowiedziałeś, używając funkcji 'insert' podczas pisania odpowiedzi. *Wielkie umysły myślą podobnie*. :-) – cybermonkey

+0

Dokładnie. Nie potrzebujesz również średników, ale możesz je mieć, jeśli chcesz. – rsethc

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

To działa, ponieważ operator # oblicza długość listy. Pusta lista ma długość 0, itd

Jeśli używasz Lua 5.3+, można zrobić niemal dokładnie to, czego chciał:

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

Wyrażenia nie są stwierdzenia zawarte w Lua i muszą być używane w jakiś sposób.

+0

Proszę wyjaśnij, dlaczego twoja metoda działa. – cybermonkey

+0

Nie jestem zakochany w tym, jak wygląda, ale miło wiedzieć, że działa. – drewish

+2

Jest nieco szybki niż "table.insert". – Tim

1

bym osobiście skorzystać z funkcji table.insert:

table.insert(a,"b") 

To pozwala uniknąć konieczności iteracyjne nad całą tabelę zatem oszczędzanie cennych zasobów, takich jak pamięć i czas.