我有一个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)
非常感谢对此问题的任何见解。 谢谢
答案 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..") "
。
我很想知道哪一个产生了真正的影响,如果有的话。