2 Stimmen

Bekommen Sie das verschachtelte Tabellenergebnis in Lua

Ich habe einen Tisch A, der folgendes enthält

for i,v in pairs(Tabelle A) do print (i,v) end

1 a
2 Tisch : 50382A03     -- Tabelle B
3 hi

. Gibt es eine Möglichkeit, den Wert des Tisches B auszugeben, während ich den übergeordneten Tisch A drucke, oder kann ich ihn speichern und wieder mit derselben Funktion drucken?

Danke Jp

3voto

sbk Punkte 8872

Wenn die Frage "nested" enthält, wird die Antwort wahrscheinlich Rekursion enthalten:

function printTable(t)

    function printTableHelper(t, spacing)
        for k,v in pairs(t) do
            print(spacing..tostring(k), v)
            if (type(v) == "table") then 
                printTableHelper(v, spacing.."\t")
            end
        end
    end

    printTableHelper(t, "");

Seien Sie einfach vorsichtig mit zirkulären Verweisen.

0voto

Archinamon Punkte 173

Eine etwas veränderte Funktion für bessere Ausgabe und Abstraktion:

function printTableHelper(t,spacing)
    local spacing = spacing or ''

    if type(t)~='table' then
        print(spacing..tostring(t))
    else
        for k,v in pairs(t) do
            print(spacing..tostring(k),v)
            if type(v)=='table' then 
                printTableHelper(v,spacing..'\t')
            end
        end
    end
end

printTableHelper({'a',{'b'},'c'})

0voto

Michal Kottman Punkte 15817

Gehen Sie einfach zur lua-users wiki-Seite zur Tabellenserialisierung und wählen Sie Ihren Champion aus. Zum Beispiel behandelt der folgende Code alles, einschließlich Zyklen in Tabellen (local a={}; a.t = a):

-- alternative Version2, behandelt Zyklen, Funktionen, Boolesche Werte usw.
-- - Missbrauch zu http://richard.warburton.it
-- Ausgabe nahezu identisch wie print(table.show(t)) unten.
function print_r (t, name, indent)
  local tableList = {}
  function table_r (t, name, indent, full)
    local serial=string.len(full) == 0 and name
        or type(name)~="number" and '["'..tostring(name)..'"]' or '['..name..']'
    io.write(indent,serial,' = ') 
    if type(t) == "table" then
      if tableList[t] ~= nil then io.write('{}; -- ',tableList[t],' (Selbstreferenz)\n')
      else
        tableList[t]=full..serial
        if next(t) then -- Tabelle nicht leer
          io.write('{\n')
          for key,value in pairs(t) do table_r(value,key,indent..'\t',full..serial) end 
          io.write(indent,'};\n')
        else io.write('{};\n') end
      end
    else io.write(type(t)~="number" and type(t)~="boolean" and '"'..tostring(t)..'"'
                  or tostring(t),';\n') end
  end
  table_r(t,name or '__unnamed__',indent or '','')
end

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X