3

在 Lua 中,使用C接口,给定一个表,我如何遍历表的键/值对?

另外,如果使用数组添加了一些表表成员,我是否也需要一个单独的循环来迭代这些成员,或者是否有一种方法可以同时迭代这些成员作为键/值对?

4

2 回答 2

11

正如哈维尔所说,你想要这个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()

于 2009-06-09T21:05:50.627 回答
6

lua_next()和 Lua 的next()函数一样,都是pairs()函数使用的。它迭代数组部分和散列部分中的所有成员。

如果您想要 的类似物ipairs(),则lua_objlen()为您提供与 相同的功能#。使用它并对lua_rawgeti()数组部分进行数字迭代。

于 2009-06-08T20:01:06.217 回答