Comment puis-je savoir si un tableau est un tableau?

Je suis l'élaboration d'un simple optimisé JSON fonction. Lua utilise des tables pour représenter des tableaux, mais en JSON j'ai besoin de reconnaître entre eux. Le code ci-dessous est utilisé:

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))

Comme vous pouvez le voir dans le JSON de référence d'un object est ce qu'on appelle un table en Lua et il est différent d'un array.

La question est de savoir comment je peux détecter si un tableau est utilisé comme un tableau?

  • Une solution est de passer par toutes les paires et voir si ils n'ont numériques consécutives touches, mais ce n'est pas assez rapide.
  • Une autre solution est de mettre un drapeau dans le tableau qui dit que c'est un tableau n'est pas un objet.

Pas plus simple/la meilleure solution?

OriginalL'auteur AlexStack | 2011-09-23