在 Lua 中,使用C接口,给定一个表,我如何遍历表的键/值对?
另外,如果使用数组添加了一些表表成员,我是否也需要一个单独的循环来迭代这些成员,或者是否有一种方法可以同时迭代这些成员作为键/值对?
在 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()
数组部分进行数字迭代。