2011-01-27 57 views
2

這應該是簡單的面前,它可能是,但在我的C代碼,我想知道一個表的大小開始之前,我迭代槽它。我需要預先分配一些內存來存儲來自該表的值。要求在C LUA表大小迭代它

我得到這個表作爲一個LUA C函數的參數。

static int lua_FloatArray(lua_State *L) 
{ 
int n = lua_gettop(L); 
if (n != 1 || lua_gettype(L, 1) != LUA_TTABLE) 
{ 
    luaL_error(L, "FloatArray expects first parameter to be a table"); 
    return 0; 
} 
int tablesize = ????; 
float *a = (float*)lua_newuserdata(L, tablesize * sizeof(float)); 
lua_pushnil(L); 
int x = 0; 
while (lua_next(L, index) != 0) 
{ 
    a[x++] = (float)lua_tonumber(L, -1); 
    lua_pop(L, 1); // Remove value, but keep key for next iteration 
} 
return 1; 
} 

tablesize?如何獲得表格大小?

+1

如果使用數組表,則在迭代時使用`lua_rawgeti`,這會快得多 – 2011-01-27 16:42:46

回答

4

有沒有這樣的API函數。你需要自己計算物品。 在另一方面,你似乎可以填補C中的數組,我猜你有一個Lua表好比說{10,20,30},你認爲你會得到我所列出的順序選擇項目。這是不是lua_next。請參閱http://www.lua.org/manual/5.1/manual.html#pdf-next中的第二段。

+0

這是不正確的,lua_objlen函數返回表大小。 – scippie 2011-01-27 12:41:41

+1

@scippie,不是沒有。試試`{x = 1}`。 – lhf 2011-01-27 12:56:07

+0

我明白了。你是對的。但我正在使用純數組表,它與他們一起工作。爲什麼區別? – scippie 2011-01-27 15:36:56

0

我不知道這是否是真正良好的編程習慣,但我經常使用二維數組/表中的結構

的形式與現場的PTR到您的陣列(或指針的指針數組)以及列數和行數的字段。

6

假設你使用數組 - 表與整數個鍵,沒有(某些鍵是) - 可以使用lua_objlen方法。從手冊引用:

返回給定可接受索引處的值的「長度」:對於字符串,這是字符串長度;對於表,這是長度運算符('#')的結果;