开发者

Lua table C api

I know of: http://lua-users.org/wiki/SimpleLuaApiExample

It shows me how to build up a table (key, value) pair entry by entry.

Suppose instead, I want to build a gigantic table (say something a 1000 entry tab开发者_运维知识库le, where both key & value are strings), is there a fast way to do this in lua (rather than 4 func calls per entry:

push
key
value
rawset


What you have written is the fast way to solve this problem. Lua tables are brilliantly engineered, and fast enough that there is no need for some kind of bogus "hint" to say "I expect this table to grow to contain 1000 elements."


For string keys, you can use lua_setfield.


Unfortunately, for associative tables (string keys, non-consecutive-integer keys), no, there is not.

For array-type tables (where the regular 1...N integer indexing is being used), there are some performance-optimized functions, lua_rawgeti and lua_rawseti: http://www.lua.org/pil/27.1.html


You can use createtable to create a table that already has the required number of slots. However, after that, there is no way to do it faster other than

for(int i = 0; i < 1000; i++) {
    lua_push... // key
    lua_push... // value
    lua_rawset(L, tableindex);
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜