2010-05-09 105 views
1

我知道的: http://lua-users.org/wiki/SimpleLuaApiExample的Lua表C API

它顯示了我如何建立一個表(鍵,值)的條目對條目。我想要建立一個巨大的表(例如1000條目表,其中兩個鍵&的值都是字符串),在lua中有沒有這樣做的快速方法(而不是每個條目4個func調用:

push 
key 
value 
rawset 
+2

並測試程序看起來像快等,它是如何基準,這是爲什麼不夠快? :-)! – u0b34a0f6ae 2010-05-09 11:36:17

+0

(另:每個條目只需要3個函數調用:push key,push value,rawset) – u0b34a0f6ae 2010-05-09 11:53:17

+0

@ kaizer.se,rawset將表格放在堆棧上? – anon 2010-05-09 20:17:40

回答

4

你寫的東西解決這個問題的快速方法。 Lua桌子的設計非常出色,而且足夠快以至於不需要某種虛假的「暗示」來說「我希望這張桌子可以增長到包含1000個元素」。

0

不幸的是,締合表(字符串鍵,非連續的整數鍵),沒有,沒有。

對於陣列類型的表(其中經常1 ... N的整數索引正在使用),有一些性能優化功能,lua_rawgetilua_rawsetihttp://www.lua.org/pil/27.1.html

1

對於字符串鍵,您可以使用lua_setfield

0

您可以使用createtable創建一個已經具有所需插槽數的表。然而,在那之後,有沒有辦法做到這一點比

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

你不需要複製堆棧上的表? rawset doens't消費桌子? – anon 2010-05-09 20:18:03

+0

否Rawset僅消耗密鑰和值。否則,你怎麼能把一對以上的k,v對放在一張桌子上? – Puppy 2010-05-09 20:56:41