Lua表格值转换成字符串-性能问题

我有一段 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)

任何关于这个问题的见解都非常感谢。

谢谢

点赞
用户847349
用户847349

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

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秒。

2015-03-26 09:49:28
用户107090
用户107090

一些可以尝试的优化原始代码的方法。请按序尝试,测量每个方法的时间。

  • 在循环之前添加 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..") "

我想知道以上哪种方法能实际优化代码,如果有的话。

2015-03-26 11:13:11