lua表值为字符串性能问题

时间:2015-03-26 09:26:21

标签: string performance lua lua-table

我有一个lua代码,其中某个表(假设' abc')有50,000个键值对。现在我想创建一个长字符串,它看起来像"(key1,value1)(key2,value2)(key3,value3)......"。

这适用于具有较少元素数量的表。 50,000它可以工作,但电脑变得非常慢。有办法解决这个问题吗?

我尝试插入另一个表然后连接,因为lua中的字符串连接很昂贵,但仍然存在性能损失

local pqr = {}
for key, value in pairs(app_revenue) do
  table.insert(pqr, "(")
  table.insert(pqr, key)
  table.insert(pqr, ",")
  table.insert(pqr, value)
  table.insert(pqr, ") ")
end
local x = table.concat(pqr)

非常感谢对此问题的任何见解。 谢谢

2 个答案:

答案 0 :(得分:3)

您可以使用临时表和字符串格式。看,非常快:

local t={}

for i=1,50000 do 
    t[i] = ''..i
end

local temp = {}

for k,v in ipairs(t) do
    temp[#temp+1] = string.format('(%d, %s)', k, v)
end

local x = table.concat(temp,' ')

print(string.sub(x,1,99), #x)

不到一秒钟:http://ideone.com/tSLeBH

我机器上500000个条目的1.3秒

答案 1 :(得分:0)

在原始代码中尝试一些事情。按顺序尝试每一个,测量时间。

  • 在循环之前添加local table=table

  • 在循环之前添加local insert=table.insert并在循环中使用insert

  • 避免table.insert:在循环前添加local n=0并使用n=n+1; pqr[n]= "("等。

  • 避免重复插入:在循环中执行n=n+1; pqr[n]="("..key..","..value..") "

我很想知道哪一个产生了真正的影响,如果有的话。