我有一个简单的问题,这可能是一个愚蠢的问题,但我只是想知道......我是初学者的lua。
所以,例如我有2个脚本。
1
local text = ''
local level = getUserLevel(self)
if level < 10 then
text = 'Low level'
elseif level >= 10 and level < 20 then
text = 'Average Level'
elseif level >= 20 and level < 30 then
text = 'High Level'
end
sendMsg(self, text)
2
local a = {
b = {
[{1, 10}] = {text = "Low Level"},
[{10, 20}] = {text = "Average Level"},
[{20, 30}] = {text = "High Level"}
}
}
for k, v in pairs (a.b) do
if getUserLevel(self) >= k[1] and getUserLevel(self) < k[2] then
sendMsg(self, v.text)
end
不管代码是否更多或更少,哪一个更好地提高cpu使用率?
答案 0 :(得分:3)
第一个调用getUserLevel
一次。第二个叫它六次。这可能是一个决定因素,但一如既往,只需运行并测量。
话虽如此,这些计划并不等同。第二个允许动态更改查找表,而第一个是硬编码的。比较它们有点像苹果和橘子。
最终,我不认为这个功能会成为任何事物的热点。如果不是,则不优化。首先争取最大可读性。就这么简单。
答案 1 :(得分:0)
第一个将比具有过于复杂的表结构的第二个脚本更快,更快(~5倍)。
但是,正如已经说过的,带有表的脚本为您提供了更易于管理的选项,易于更新且不易出错。
虽然它可以更快。由于您具有相邻范围,因此无需检查两个边。数字也比对/ ipairs快。
local lvls = {
{1, "Low Level"},
{10, "Average Level"},
{20, "High Level"}
}
local function search_name(user_level)
local text
for i=1,#lvls do
local level = lvls[i]
if level[1]>user_level then
return text
end
text = level[2]
end
end
print(search_name(getUserLevel(self)))
此选项比初始表方法快2倍(getUserLevel移出循环)。