【问题标题】:How to get length of a table in Lua? [duplicate]如何在Lua中获取表格的长度? [复制]
【发布时间】:2016-12-04 23:38:29
【问题描述】:

我是 lua 新手,我的 lua 版本是 5.1。
我有这个问题。谁能帮我解释一下'#'?

local tblTest =  
{  
    [1] = 2,  
    [2] = 5,  
    [5] = 10,  
}  
print(#tblTest)

这个输出 2 和 ..

local tblTest =  
{  
    [1] = 2,  
    [2] = 5,  
    [4] = 10,  
}  
print(#tblTest)

输出为 4。为什么?
谢谢大家。

【问题讨论】:

    标签: lua


    【解决方案1】:

    输出是 4,因为最后一个有值的键是 4,但这并不意味着 3 也没有定义。在 lua 3 中将被定义为 nil。因此,当您使用 # 运算符时,它会对序列中的每个键进行计数,直到最后一个非零值为止。除了(我可能错了)表中的最后一个键是 2 的幂,这对语言优化有影响,它的值是 2 的幂。一般来说,你应该远离表使用 nil 值,因为因此会发生其他一些奇怪的行为。

    这个块可以做你想做的事:

    local T = {
    [1] = 2,
    [2] = 5,
    [10] = 10
    }
    
    local lengthNum = 0
    
    For k, v in pairs(T) do -- for every key in the table with a corresponding non-nil value 
       lengthNum = lengthNum + 1
    end
    print(lengthNum)
    }
    

    它的作用是检查整个表的键(例如 [1] 或 [2])并检查它们是否具有值。每个具有非 nil 值的键都会再运行一次 for 循环。可能有更短的方法,但我会这样做。

    【讨论】:

    • 是的,你大错特错。看看骗子。
    • 我是在我所说的地方,它以 2 的幂计算值,因为它应该在那里说 key for value,还是我在其他地方错了?
    • 可以计数到 2 的幂,尽管之前有孔,但它可能不会。不保证,细节在骗人。
    • 如果它碰巧在使用 2 的幂表进行优化的实现上运行,则分配模式是正确的,依此类推。没有什么可依赖的。
    • @Deduplicator 哦,看!如果最后一个 2 的幂已经分配了内存,它只会做 2 的幂,对吧?所以,t= {[1] = 1, [2] =2, [4] = 4, [8] = 8 } print (#t) --returns 8 但是,t= { [1] = 1, [ 2] =2, [4] = 4, [16] = 8 } print (#t) --returns 4
    猜你喜欢
    • 2012-09-18
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 2012-04-22
    • 1970-01-01
    • 2013-03-24
    相关资源
    最近更新 更多