Wie weiß ich, ob eine Tabelle ist ein array?

Entwickle ich eine einfache optimierte JSON Funktion. Lua verwendet Tabellen darstellen arrays aber im JSON-Format, die ich brauche, um zu erkennen, zwischen Ihnen. Der folgende code verwendet wird:

t={
    a="hi",
    b=100
}

function table2json(t,formatted)
if type(t)~="table" then return nil,"Parameter is not a table. It is: "..type(t)    end

local ret=""--return value
local lvl=0 --indentation level
local INDENT="  " --OPTION: the characters put in front of every line for indentation
function addToRet(str) if formatted then ret=ret..string.rep(INDENT,lvl)..str.."\n" else ret=ret..str end end

addToRet("{")
lvl=1
for k,v in pairs(t) do
    local typeof=type(v)
    if typeof=="string" then
        addToRet(k..":\""..v.."\"")
    elseif typeof=="number" then
        addToRet(k..":"..v)
    end
end
lvl=0
addToRet("}")

return ret
end

print(table2json(t,true))

Können Sie im JSON-Referenz auf eine object ist, was man eine table im Lua und es unterscheidet sich von einem array.

Die Frage ist, wie kann ich erkennen, wenn eine Tabelle verwendet wird, wie ein array?

  • Eine Lösung ist natürlich, gehen Sie durch alle Paare und sehen, wenn Sie nur aufeinander folgende numerische Tasten, aber das ist nicht schnell genug.
  • Eine andere Lösung ist das setzen einer flag in der Tabelle, die sagt, es ist ein array kein Objekt.

Einfacher/intelligentere Lösung?

InformationsquelleAutor AlexStack | 2011-09-23
Schreibe einen Kommentar