如何编写确定表参数是否为真数组的函数?

isArray({1, 2, 4, 8, 16}) -> true
isArray({1, "two", 3, 4, 5}) -> true
isArray({1, [3]="two", [2]=3, 4, 5}) -> true
isArray({1, dictionaryKey = "not an array", 3, 4, 5}) -> false


我看不出有什么方法可以找出数字键是否是唯一的键。

最佳答案

ipairs对索引1..n进行迭代,其中n + 1是第一个具有nil值的整数索引
对将遍历所有键。
如果键的数目多于顺序索引的数目,则它不能是数组。

因此,您要做的就是查看pairs(table)中的元素数是否等于ipairs(table)中的元素数
该代码可以编写如下:

function isArray(tbl)
    local numKeys = 0
    for _, _ in pairs(tbl) do
        numKeys = numKeys+1
    end
    local numIndices = 0
    for _, _ in ipairs(tbl) do
        numIndices = numIndices+1
    end
    return numKeys == numIndices
end


我对Lua还是很陌生,所以可能有一些内置函数可以将numKeys和numIndices计算简化为简单的函数调用。

09-04 09:36