lua中元表方法速度比較

2021-06-22 17:29:07 字數 1342 閱讀 9632

直接對錶進行訪問與賦值

local vtbl 	= {}

local t = {}

--setmetatable(t, )

local t1 = os.clock()

for i = 1, 10000000, 1 do

t[1] = i

endlocal t2 = os.clock()

print(t2 - t1)

輸出結果:

>lua -e "io.stdout:setvbuf 'no'" "main.lua" 

0.263

>exit code: 0

----------------------

通過設定元表為某table來實現訪問與賦值:

local vtbl 	= {}

local t = {}

setmetatable(t, )

local t1 = os.clock()

for i = 1, 10000000, 1 do

t[1] = i

endlocal t2 = os.clock()

print(t2 - t1)

輸出結果:

>lua -e "io.stdout:setvbuf 'no'" "main.lua" 

0.435

>exit code: 0

可以看到,多了一層表的訪問,時間消耗增加一倍

通過設定元表為某函式來實現訪問與賦值:

local vtbl 	= {}

local t = {}

setmetatable(t, )

local t1 = os.clock()

for i = 1, 10000000, 1 do

t[1] = i

endlocal t2 = os.clock()

print(t2 - t1)

輸出結果:

>lua -e "io.stdout:setvbuf 'no'" "main.lua" 

0.981

>exit code: 0

總結結果顯而易見,原方法為函式式寫法時,最後的開銷又增加了一倍,因為函式裡本身就又有對錶的訪問與賦值,而呼叫函式又需要開銷。

因此在設定元表時,如果僅僅只是把錶t的訪問或賦值轉嫁到另外乙個表vtbl中,建議採用:

setmetatable(t, )
而不建議採用:

setmetatable(t, )

比較順序表中元素與表頭元素

思路分析 首先設定乙個變數儲存表頭元素,再設定兩個變數儲存順序表第乙個元素和最後乙個元素,然後分別從兩端開始遍歷順序表的元素與表頭元素相比較,先從從j所儲存的元素開始,若比表頭元素小,則j 若比表頭元素大將j所儲存的元素附給當前i所儲存的元素,然後又從i開始比較,如此往復,直到i j.include...

LUA表轉殖方法歸納

將lua乙個表,轉殖出乙份為乙個獨立的另外乙個表。對於乙個module,如果在require之後,獲得的表物件,不能直接修改,例如lua快取此表,但是多次邏輯執行,都使用的是原始module,這種情況就需要使用clone。clone例項,例如將 轉殖出乙份 使用 tostring 列印兩個表,可以看...

Lua元表和元表方法

今天學習lua中的元表,書上講的太難懂了,網上搜尋教程也將的模模糊糊,搜了一會總結了一下經驗,跟大家分享一下,希望對您有所幫助。如何設定元表?local t local mt getmetatable t nil setmetatable t,mt 將t1設定為t的元表 getmetatable t...