我已将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使用的例子,我没有在任何地方看到过这个......
答案 0 :(得分:24)
table.getn
(你不应该在Lua 5.1+中使用。使用长度运算符#
)返回表格的数组部分中的元素数量
数组部分是以数字1开头的每个键,直到第一个值nil
(不存在)为止。如果所有键都是字符串,那么表的数组部分的大小为0.
答案 1 :(得分:3)
虽然这对于简单列表而言代价很高(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
如果您有此类要求,并且您的环境允许,请考虑使用提供penlight的that kind of features等等。
答案 2 :(得分:2)
#运算符(和table.getn)有效地返回数组部分的大小(虽然当你有一个多孔的表时语义更复杂)
它不计算表格哈希部分的任何内容(例如,字符串键)
答案 3 :(得分:0)
for k,v in pairs(tbl) do count = count + 1 end