2009-06-08 6 views
3

In Lua, wie benutze ich die C-Schnittstelle, eine Tabelle gegeben, wie ich Iterate durch die Schlüssel-Wert-Paare der Tabelle?Was ist die C-Schnittstelle zu Lua für den Zugriff auf die Schlüssel-Wert-Paare einer Tabelle?

Auch wenn einige Tabellen-Tabellenelemente mithilfe von Arrays hinzugefügt werden, benötige ich eine separate Schleife, um diese auch zu durchlaufen, oder gibt es eine einzige Möglichkeit, diese Elemente gleichzeitig mit den Schlüssel/Wert-Paaren zu durchlaufen?

Antwort

6

lua_next() ist genau das gleiche wie Lua next() Funktion, die von der pairs() Funktion verwendet wird. Es iteriert alle Elemente, sowohl im Array-Teil als auch im Hash-Teil.

Wenn Sie das Analog von ipairs() möchten, gibt Ihnen die lua_objlen() die gleiche Funktionalität wie . Verwenden Sie es und lua_rawgeti(), um numerisch über den Array-Teil zu iterieren.

10

Wie Javier sagt, wollen Sie die lua_next() Funktion. Ich dachte, ein Codebeispiel könnte dazu beitragen, die Dinge klarer zu machen, da dies auf den ersten Blick etwas schwierig zu verwenden ist.

Zitiert aus dem Handbuch:

Eine typische Traversal wie folgt aussieht:

/* 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); 
} 

Beachten Sie, dass lua_next() auf den Schlüsselwert ist sehr empfindlich auf den Stapel gelassen. Do not Anruf lua_tolstring() auf den Schlüssel, es sei denn, es ist wirklich schon eine Zeichenfolge, weil diese Funktion ersetzen den Wert es konvertiert.