Lua table.getn()返回0?
我已经将Lua嵌入到我的C应用程序中,并试图找出为什么在我的C代码中创建的表通过:
lua_createtable(L, 0, numObjects);
并且返回Lua,当我调用以下内容时将产生零结果:
print("Num entries", table.getn(data))
(其中“data”是由lua_createtable创建的表)
表中有明显的数据,因为我可以通过以下方式遍历每个条目(字符串:userdata)对:
for key, val in pairs(data) do ... end
但是为什么table.getn(data)返回零? 当我用lua_createtable创建它时,是否需要在表的元数据中插入一些东西? 我一直在寻找lua_createtable使用的例子,我没有看到这在任何地方都做过….
table.getn
(你不应该在Lua 5.1+中使用。使用长度运算符#
)返回表格数组部分中的元素数量。
数组部分是以数字1开头的每个键,并且直到第一个值为nil
(不存在)为止。 如果所有键都是字符串,那么表的数组部分的大小为0。
虽然这对于简单列表来说是昂贵的(O(n)vs O(1)),但您还可以添加一种方法来计算地图的元素:
>> function table.map_length(t) local c = 0 for k,v in pairs(t) do c = c+1 end return c end >> a = {spam="data1",egg='data2'} >> table.map_length(a) 2
如果您有这样的要求,并且您的环境允许您这样做,请考虑使用提供此类function的 笔灯等等。
#运算符(和table.getn)有效地返回数组部分的大小(虽然当你有一个多孔的表时,语义更复杂)
它不计算表的哈希部分中的任何内容(例如,字符串键)
for k,v in pairs(tbl) do count = count + 1 end