lua使用table.concat连接大量字符串

转载 2017年10月14日 00:22:40

笨木头花心贡献,哈?花心?不,是用心~
转载请注明,原文地址: http://www.benmutou.com/archives/1744
文章来源:笨木头与游戏开发

1.预备知识,在Lua中获取系统时间
为了直观地看到效率的差别,我们要计算一下代码的执行时间,所以,先来看看如何计算吧:

local startTime = os.clock();
for i = 1, 1990000000, 1 do

end

local endTime = os.clock();
local useTime = endTime - startTime;
print("消耗时间:" .. useTime .. "s");

输出结果如下:
[LUA-print] 消耗时间:0.59699999999998s
os.clock()可以获得当前系统时间(单位:秒),只要在代码执行前后都获取一次时间,取差值,就能得到代码执行的时间消耗了。

2.Lua中连接大量字符串
我们来试试连接一大堆字符串吧,如下代码:
local strs = {};
for i = 1, 30000, 1 do
strs[i] = “helloworld”;
end

local result = "";

local startTime = os.clock();
for index, str in ipairs(strs) do
    result = result .. str;
end

local endTime = os.clock();
local useTime = endTime - startTime;

print("消耗时间:" .. useTime .. "s");

首先,创建了一个strs的table,里面存放30000个字符串,虽然内容都是相同的,但确实是有30000个字符串在里面。
然后,使用一个result变量,把strs里的所有字符串用连接操作符连接起来~

咋一看,没什么问题吧,很正常吖。(小若:别开玩笑了,你会不挖坑给我们踩?)
运行一下,输出结果如下:
[LUA-print] 消耗时间:1.667s
才消耗了1.667s,还好吧,完全能接受,呵呵。(小若:快说,别卖关子!)
啊,怎么可能啊!我们可是闲得X疼的人,怎么可能忍受3万次循环就耗去1秒多的时间呢?
你让那些做算法的人怎么办,他们肯定无法接受的!

3.使用table.concat快速连接大量字符串
所以了,就有了table.concat,concat函数对字符串连接进行了优化,即使进行大量的连接操作,也不会消耗多少时间。
来试试吧,如下代码:
local strs = {};
for i = 1, 30000, 1 do
strs[i] = “helloworld”;
end

local result = "";

local startTime = os.clock();
result = table.concat(strs);

local endTime = os.clock();
local useTime = endTime - startTime;

print("消耗时间:" .. useTime .. "s");

立刻来看输出结果:
[LUA-print] 消耗时间:0.0049999999998818s

怎么样?这差别,简直就没法形容了。

4.结束
Lua的字符串和Java的字符串差不多,都是不可变的,不可变的意思是什么呢?
比如刚刚的result字符串,每一次进行连接操作之后,其实就产生了新的字符串,不再是原来的那个了。
于是,不断连接,就不断产生新的字符串,产生新字符串是需要复制操作,随着连接操作的不断进行着,字符串越来越大,复制操作也就越来越耗时。
这就是为什么,简单地进行连接操作会这么慢了。

好了,就说这么多喇~

Lua 中 table 库函数 table.concat 连接 函数

Lua 中 table 库函数 do --> table.concat 连接 函数 tab = {"a", "c", "d", "b"} --(1) -- 一个参数,参数...
  • LIQIANGEASTSUN
  • LIQIANGEASTSUN
  • 2015-06-22 10:55:39
  • 8586

lua 之table方法concat

table  一部分的table函数只对其数组部分产生影响, 而另一部分则对整个table均产生影响. 下面会分开说明.  table.concat(table, sep,  start,...
  • ganpengjin1
  • ganpengjin1
  • 2013-11-15 14:03:36
  • 19511

【笨木头Lua专栏】基础补充09:使用table.concat连接大量字符串

最近2天都没有写新的文章了,主要是最近的内容没有特别有意思的。之前的协同程序也暂时没有感觉到特别适用的地方,今天在看数据结构的部分,也是没多大意思(不代表没用)。但是突然发现了一个有意思的地方,那就是...
  • musicvs
  • musicvs
  • 2014-11-12 20:41:16
  • 2519

lua的table.concat坑

local table1 = {first="a",second="b",1,2,3,4,5,6,7,8, 111,nil,nil,111} print(table.concat(table1, "|...
  • SakuraLLj
  • SakuraLLj
  • 2016-04-15 20:54:26
  • 2824

lua程序性能优化(字符串连接与格式化)

代码 local str1 = "sdf".."sfdfds".."fdssdfdsfs" local str2 = string.format("%s%s%s","sdf","sfdfds"...
  • yuanfengyun
  • yuanfengyun
  • 2013-12-17 18:51:03
  • 7289

Lua语法小贴士(一)字符串基础操作

字符串是Lua里面非常常用的类型,本文就介绍一下字符串的一些相关操作。
  • ecidevilin
  • ecidevilin
  • 2016-10-10 13:38:28
  • 3910

lua中如何去访问table中函数

看例子代码: do table_ = { a = 1, foo = function(i) return i end } print(table_.foo(1)) ...
  • ganpengjin1
  • ganpengjin1
  • 2014-03-03 21:56:45
  • 2050

Lua5.1 table库

1、table.concat  2、table.insert
  • X805433354
  • X805433354
  • 2014-04-24 22:07:04
  • 1577

lua中连接大量的字符串

如果我们需要连接大量的字符串或者字符,一个一个的连接方式效率是很低的。我们可以使用辅助库提供的buffer相关函数来解决这个问题。 Auxlib中的buffer的使用: static int str_...
  • suhiymof
  • suhiymof
  • 2013-07-18 15:38:23
  • 2021

lua字符串操作

转载http://www.jb51.net/article/57631.htm string.find(字符串查找) string.gsub(全局字符串替换) string.gfind(全局字符...
  • bestboyxie
  • bestboyxie
  • 2015-08-31 12:18:43
  • 4646
收藏助手
不良信息举报
您举报文章:lua使用table.concat连接大量字符串
举报原因:
原因补充:

(最多只允许输入30个字)