在Lua中,使用C接口,给定一个表,如何遍历表的键/值对?
另外,如果使用数组添加了一些表表成员,我是否需要一个单独的循环来迭代这些成员,或者是否有一种方法可以同时迭代这些成员作为键/值对?
正如哈维尔所说,你想要这个lua_next()
功能.我认为代码示例可能有助于使事情更清晰,因为乍一看这可能有点棘手.
引自手册:
典型的遍历如下所示:
/* table is in the stack at index 't' */ lua_pushnil(L); /* first key */ while (lua_next(L, t) != 0) { /* uses 'key' (at index -2) and 'value' (at index -1) */ printf("%s - %s\n", lua_typename(L, lua_type(L, -2)), lua_typename(L, lua_type(L, -1))); /* removes 'value'; keeps 'key' for next iteration */ lua_pop(L, 1); }
请注意,lua_next()
对堆栈上剩余的键值非常敏感.除非它确实已经是一个字符串,否则不要调用lua_tolstring()
该键,因为该函数将替换它转换的值.
lua_next()
与Lua的next()
函数一样,函数使用它pairs()
.它迭代数组部分和散列部分中的所有成员.
如果你想要模拟ipairs()
,它lua_objlen()
给你相同的功能#
.使用它并lua_rawgeti()
以数字方式迭代数组部分.