在 C 中迭代多维 Lua Table
Iterating a multidimensional Lua Table in C
我在 C 中迭代多维 Lua table 时遇到问题。
让 Lua table 是这样的,即:
local MyLuaTable = {
{0x04, 0x0001, 0x0001, 0x84, 0x000000},
{0x04, 0x0001, 0x0001, 0x84, 0x000010}
}
我尝试扩展 C 示例代码:
/* 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);
}
按第二个维度:
/* table is in the stack at index 't' */
lua_pushnil(L); /* first key */ /* Iterating the first dimension */
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)));
if(lua_istable(L, -1))
{
lua_pushnil(L); /* first key */ /* Iterating the second dimension */
while (lua_next(L, -2) != 0) /* table is in the stack at index -2 */
{
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);
}
/* removes 'value'; keeps 'key' for next iteration */
lua_pop(L, 1);
}
输出为:
"数 - table"(从第一个维度开始)
"数-数"(来自二次元)
"数-线程"(来自二次元)
之后我的代码在 "while (lua_next(L, -2) != 0)"
中崩溃
有人知道如何正确迭代二维 Lua table 吗?
来自第二维度的 lua_pop(L, 1)
在您的迭代之外!
while (lua_next(L, -2) != 0) /* table is in the stack at index -2 */
{
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);
您需要将它放在 while 循环中以使其工作以删除值,lua_next()
在您的 while 条件中隐式地放入堆栈。
while (lua_next(L, -2) != 0) /* table is in the stack at index -2 */
{
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);
}
这样它应该会按预期工作。
我在 C 中迭代多维 Lua table 时遇到问题。
让 Lua table 是这样的,即:
local MyLuaTable = {
{0x04, 0x0001, 0x0001, 0x84, 0x000000},
{0x04, 0x0001, 0x0001, 0x84, 0x000010}
}
我尝试扩展 C 示例代码:
/* 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);
}
按第二个维度:
/* table is in the stack at index 't' */
lua_pushnil(L); /* first key */ /* Iterating the first dimension */
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)));
if(lua_istable(L, -1))
{
lua_pushnil(L); /* first key */ /* Iterating the second dimension */
while (lua_next(L, -2) != 0) /* table is in the stack at index -2 */
{
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);
}
/* removes 'value'; keeps 'key' for next iteration */
lua_pop(L, 1);
}
输出为:
"数 - table"(从第一个维度开始)
"数-数"(来自二次元)
"数-线程"(来自二次元)
之后我的代码在 "while (lua_next(L, -2) != 0)"
中崩溃有人知道如何正确迭代二维 Lua table 吗?
来自第二维度的 lua_pop(L, 1)
在您的迭代之外!
while (lua_next(L, -2) != 0) /* table is in the stack at index -2 */
{
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);
您需要将它放在 while 循环中以使其工作以删除值,lua_next()
在您的 while 条件中隐式地放入堆栈。
while (lua_next(L, -2) != 0) /* table is in the stack at index -2 */
{
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);
}
这样它应该会按预期工作。