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 的用法示例,但是我没有在任何地方看到过这样的做法...

原文链接 https://stackoverflow.com/questions/9613322

点赞
stackoverflow用户282536
stackoverflow用户282536

# 运算符(以及 table.getn 函数)有效地返回数组部分的大小(尽管当你有一个包含空洞的表时,语义更加复杂)。它不计算表的哈希部分中的任何内容(例如,字符串键)。

2012-03-08 06:06:02
stackoverflow用户734069
stackoverflow用户734069

table.getn (在 Lua 5.1+ 中不应该使用,应该使用长度运算符 #)返回表格_数组_部分中元素的数量。

数组部分是每个以数字 1 开头并逐渐增加直到第一个值为 nil(不存在)的键。如果您的所有键都是字符串,则表格的数组部分大小为 0。

2012-03-08 06:07:14
stackoverflow用户1377500
stackoverflow用户1377500

虽然这很耗费资源(对简单的列表而言是O(1),而对于此方法则是O(n)的),你也可以添加一个方法来计算你的map中的元素数量:

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,它提供了这种功能以及更多的功能。

2013-01-17 11:06:29
stackoverflow用户4139145
stackoverflow用户4139145
for k,v in pairs(tbl) do count = count + 1 end

将 tbl 中的键值对遍历一遍,对 count 进行加一操作。

2014-10-13 21:24:19