2016-10-26 1 views
1

Ich bin ziemlich neu zu Lua und Programmierung im Allgemeinen. Ich habe mich gefragt, wie man table.insert für verschachtelte Tabellen verwendet. Bisher habe ich das geschrieben, aber es fügt nichts in die verschachtelten Tabellen ein.Einfügen von Werten in verschachtelte Tabellen

days = {d1 = {},d2 = {},d3 = {},d4 = {},d5 = {},d6 = {},d7 = {},d8 = {},d9 ={},d10 = {},d11 = {},d12 = {},d13 = {},d14 = {},d15 = {},d16 = {},d17 = {},d18 = {},d19 = {},d20 = {},d21 = {},d22 = {},d23 = {},d24 = {},d25 = {} , d26 = {}, d27 = {}, d28 = {}, d29 = {}, d30 = {}, d31 = {}} 
dw = 0 
dh = 0 
for _,v in pairs(days) do 
    for _,v in pairs(v) do 
     table.insert(v, dw) 
     table.insert(v, dh) 
    end 
end 

for _,v in pairs(days) do 
    for _,v in pairs(v) do 
     print(v) 
    end 
end 

Antwort

2

Sie müssen nicht durch eine Tabelle iterieren, um Werte hinzuzufügen. Tatsächlich fügt das Hinzufügen von Werten zu einer Tabelle, während Sie darauf iterieren, möglicherweise dazu, dass die Schleife nie beendet wird, da sie neue Werte hinzufügt alle Iteration. Zum Glück sind Ihre Tabellen leer, so dass das Programm niemals in diese Schleife eintritt.

for _,v in pairs(days) do 
    for _,v in pairs(v) do -- <- unnecessary, potentially dangerous! 
     table.insert(v, dw) 
     table.insert(v, dh) 
    end 
end 

Entfernen Sie einfach die innere Schleife.

for _,v in pairs(days) do 
    table.insert(v, dw) 
    table.insert(v, dh) 
end 

Beachten Sie auch andere Optionen zum Generieren dieses Tabellensatzes.

local days = (function (t) 
    for n = 1, 31 do 
     t['d' .. n] = { 0, 0 } 
    end 

    return t 
end) {} 

Simplified:

local days = {} 

for n = 1, 31 do 
    days['d' .. n] = { 0, 0 } 
end 
+0

Vielen Dank für diese Oka. Das hilft wirklich. Kann jemand erklären, wie "function (t)" funktioniert, wie "t ['d' ..n]" funktioniert und warum theres "t zurückgibt". – laquishabonquiquithe3rd

+0

@ laquishabonquiquithe3rd 't ['d' .. n]' ist eine Verkettung der Zeichenkette ''d''' mit dem aktuellen Index der Schleife, wodurch ''d1', 'd2', 'd3'' und so entstehen auf, zur Verwendung als Schlüssel in der Tabelle "t". 't' ist das erste Argument der Funktion, die nach dem Funktionsausdruck (' {} ') als neue leere Tabelle übergeben wird. Wir geben "t" zurück, so dass es der Variablen "days" zugewiesen ist. Dies war ein etwas fortgeschrittener Hinweis, den Sie in Betracht ziehen sollten, diese Logik in eine Funktion zu integrieren, besonders wenn Sie mehrere dieser Tabellen erstellen. Einfach diese Funktion extrahieren, ihr einen Namen geben und den Ausdruck ersetzen. – Oka