当前位置 : 主页 > 网络编程 > lua >

数组 – 如何检查lua表是否只包含连续数字索引?

来源:互联网 收集:自由互联 发布时间:2021-06-23
如何编写一个函数来确定它的表参数是否为真数组? isArray({1, 2, 4, 8, 16}) - trueisArray({1, "two", 3, 4, 5}) - trueisArray({1, [3]="two", [2]=3, 4, 5}) - trueisArray({1, dictionaryKey = "not an array", 3, 4, 5}) - fals
如何编写一个函数来确定它的表参数是否为真数组?

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值的整数索引
对遍历所有键.
如果有多个键而不是顺序索引,则它不能是一个数组.

所以你要做的就是看看成对的元素数量(表格)是否等于ipairs中的元素数量(表格)
代码可以写成如下:

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计算减少到简单的函数调用.

网友评论