2009-06-08 77 views
3

在Lua中,使用C接口,給定一個表,如何遍歷表的鍵/值對?另外,如果使用數組添加一些表表格成員,我是否需要一個單獨的循環來遍歷這些數據,或者是否有一種方法可以在鍵/值對的同一時間迭代這些成員?Lua訪問表格的鍵/值對的C接口是什麼?

回答

6

lua_next()與Lua的next()函數一樣,它被pairs()函數使用。它遍歷數組部分和散列部分中的所有成員。

如果您想要模擬ipairs(),則lua_objlen()會提供與#相同的功能。使用它和lua_rawgeti()來數值遍歷數組部分。

10

正如哈維爾所說,你想要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(),除非它確實已經是一個字符串,因爲該函數將替換爲它轉換的值。