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 に答える