我需要知道哪种方法更快,因为我需要在性能很重要的项目中的表中插入元素。我运行了以下代码:
local total = 0
local mytable = {}
for i = 1, 1e7 do
local clock = os.clock
local push = table.insert
local t = clock()
push(mytable, 0)
t = clock() - t
total = total + t
end
print("table.insert: "..total)
local total = 0
local mytable = {}
for i = 1, 1e7 do
local clock = os.clock
local t = clock()
mytable[#mytable + 1] = 0
t = clock() - t
total = total + t
end
print("Manual approach: "..total)
事实证明,第二种方法的运行速度比第一种方法快2秒。
我理解第一个是函数调用,但相比之下,第二个调用#
运算符,执行添加,然后为值分配索引,所有这些都在Lua端,其中第一个是在C方面做的。
那么为什么第二种方法更快呢?功能真的那么慢吗?
答案 0 :(得分:0)
因为函数调用。 显示下一个代码。此代码基于您的代码。
function insert(t, v)
t[#t + 1] = v
end
for i = 1, 1e7 do
local clock = os.clock
local t = clock()
--mytable[#mytable + 1] = 0
insert(mytable, 0)
t = clock() - t
total = total + t
end
代码工作原理相同,但增加到一个函数调用。
结果时间是 table.insert:4.705
手动方法:4.752< - 插入功能