2014-12-11 8 views
9

Ich versuche, das Äquivalent von herauszufinden:Wie kann ich an einem Tisch in Lua anhängen

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

Ich möchte nicht mit einem Inkrementieren Index kommen zu lassen. Gibt es einen einfachen Weg, dies zu tun?

+6

Die gesamte Dokumentation ist verfügbar unter http://www.lua.org/manual/5.2/ – rsethc

+1

oh das ist wirklich hilfreich. google hat mich immer auf http://www.lua.org/pil/2.5.html hingewiesen, was im Grunde nutzlos ist. – drewish

Antwort

9

Sie suchen nach der insert Funktion, die im table Abschnitt der Hauptbibliothek gefunden wird.

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

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

+1

Verdammt, Sie antworteten mit der 'insert' -Funktion, während ich meine Antwort eintippte. *Große Köpfe denken ähnlich*. :-) – cybermonkey

+0

Genau. Sie brauchen die Semikolons auch nicht, aber Sie können em haben, wenn Sie möchten. – rsethc

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

Das funktioniert, weil die # Bediener die Länge der Liste berechnet. Die leere Liste hat die Länge 0, usw.

Wenn Sie Lua 5.3+ verwenden, dann können Sie fast genau das tun, was man wollte:

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

Ausdrücke sind keine Aussagen in Lua und sie sein müssen irgendwie benutzt.

+0

Bitte erweitern Sie, warum Ihre Methode funktioniert .. – cybermonkey

+0

Ich bin nicht verliebt in die Art, wie es aussieht, aber schön zu wissen, dass es funktioniert. – drewish

+2

Es ist etwas schneller als 'table.insert'. – Tim

1

Ich würde persönlich Nutzung der table.insert Funktion machen:

table.insert(a,"b") 

Dies erspart Ihnen die gesamte Tabelle somit wertvolle Ressourcen wie Speicher und Zeitersparnis iterieren haben.

Verwandte Themen