最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Lua中使用table.concat連接大量字符串實(shí)例

 更新時間:2014年09月13日 11:31:25   作者:笨木頭  
這篇文章主要介紹了Lua中使用table.concat連接大量字符串實(shí)例,本文是Lua處理大量字符串的一個測試文章,測試了2種方法處理大量字符串的消耗時間,需要的朋友可以參考下

最近2天都沒有寫新的文章了,主要是最近的內(nèi)容沒有特別有意思的。

之前的協(xié)同程序也暫時沒有感覺到特別適用的地方,今天在看數(shù)據(jù)結(jié)構(gòu)的部分,也是沒多大意思(不代表沒用)。

但是突然發(fā)現(xiàn)了一個有意思的地方,那就是——連接大量字符串的時候,如何解決效率問題。

1.預(yù)備知識,在Lua中獲取系統(tǒng)時間

為了直觀地看到效率的差別,我們要計(jì)算一下代碼的執(zhí)行時間,所以,先來看看如何計(jì)算吧:

復(fù)制代碼 代碼如下:

    local startTime = os.clock();
    for i = 1, 1990000000, 1 do
      
    end
  
    local endTime = os.clock();
    local useTime = endTime - startTime;
    print("消耗時間:" .. useTime .. "s");

輸出結(jié)果如下:

復(fù)制代碼 代碼如下:

[LUA-print] 消耗時間:0.59699999999998s

os.clock()可以獲得當(dāng)前系統(tǒng)時間(單位:秒),只要在代碼執(zhí)行前后都獲取一次時間,取差值,就能得到代碼執(zhí)行的時間消耗了。

2.Lua中連接大量字符串

我們來試試連接一大堆字符串吧,如下代碼:

復(fù)制代碼 代碼如下:

    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");

首先,創(chuàng)建了一個strs的table,里面存放30000個字符串,雖然內(nèi)容都是相同的,但確實(shí)是有30000個字符串在里面。

然后,使用一個result變量,把strs里的所有字符串用連接操作符連接起來~
 
咋一看,沒什么問題吧,很正常吖。(小若:別開玩笑了,你會不挖坑給我們踩?)
運(yùn)行一下,輸出結(jié)果如下:

復(fù)制代碼 代碼如下:

[LUA-print] 消耗時間:1.667s

才消耗了1.667s,還好吧,完全能接受,呵呵。(小若:快說,別賣關(guān)子!)

啊,怎么可能啊!我們可是閑得X疼的人,怎么可能忍受3萬次循環(huán)就耗去1秒多的時間呢?

你讓那些做算法的人怎么辦,他們肯定無法接受的!

3.使用table.concat快速連接大量字符串

所以了,就有了table.concat,concat函數(shù)對字符串連接進(jìn)行了優(yōu)化,即使進(jìn)行大量的連接操作,也不會消耗多少時間。
來試試吧,如下代碼:

復(fù)制代碼 代碼如下:

    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");

立刻來看輸出結(jié)果:

復(fù)制代碼 代碼如下:

[LUA-print] 消耗時間:0.0049999999998818s

怎么樣?這差別,簡直就沒法形容了。

4.結(jié)束

Lua的字符串和Java的字符串差不多,都是不可變的,不可變的意思是什么呢?

比如剛剛的result字符串,每一次進(jìn)行連接操作之后,其實(shí)就產(chǎn)生了新的字符串,不再是原來的那個了。

于是,不斷連接,就不斷產(chǎn)生新的字符串,產(chǎn)生新字符串是需要復(fù)制操作,隨著連接操作的不斷進(jìn)行著,字符串越來越大,復(fù)制操作也就越來越耗時。

這就是為什么,簡單地進(jìn)行連接操作會這么慢了。
 
好了,就說這么多喇~

相關(guān)文章

  • Lua學(xué)習(xí)筆記之表和函數(shù)

    Lua學(xué)習(xí)筆記之表和函數(shù)

    這篇文章主要介紹了Lua學(xué)習(xí)筆記之表和函數(shù),本文在代碼中使用大量注釋講解了Lua的表和函數(shù)的使用,需要的朋友可以參考下
    2014-09-09
  • Lua教程(七):數(shù)據(jù)結(jié)構(gòu)詳解

    Lua教程(七):數(shù)據(jù)結(jié)構(gòu)詳解

    這篇文章主要介紹了Lua教程(七):數(shù)據(jù)結(jié)構(gòu)詳解,本文講解了數(shù)組、二維數(shù)組、鏈表、隊(duì)列與雙向隊(duì)列、 集合和包(Bag)、StringBuilder等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Lua基礎(chǔ)教程之賦值語句、表達(dá)式、流程控制、函數(shù)學(xué)習(xí)筆記

    Lua基礎(chǔ)教程之賦值語句、表達(dá)式、流程控制、函數(shù)學(xué)習(xí)筆記

    這篇文章主要介紹了Lua基礎(chǔ)教程之賦值語句、表達(dá)式、流程控制、函數(shù)學(xué)習(xí)筆記,本文來自個人總結(jié),需要的朋友可以參考下
    2014-09-09
  • Lua獲取系統(tǒng)時間和時間格式化方法及格式化參數(shù)

    Lua獲取系統(tǒng)時間和時間格式化方法及格式化參數(shù)

    這篇文章主要介紹了Lua獲取系統(tǒng)時間和時間格式化方法及格式化參數(shù),需要的朋友可以參考下
    2015-04-04
  • OpenResty中正則模式匹配的2種方法詳解

    OpenResty中正則模式匹配的2種方法詳解

    在 OpenResty 中,同時存在兩套正則表達(dá)式規(guī)范:Lua 語言的規(guī)范和 Nginx 的規(guī)范,下面這篇文章主要給大家介紹了關(guān)于OpenResty中正則模式匹配的2種方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2018-04-04
  • Lua和C++的通信流程分解

    Lua和C++的通信流程分解

    這篇文章主要介紹了Lua和C++的通信流程分解,本文用一張圖講解了Lua和C++之間的通信流程,并對每一步做了分解,需要的朋友可以參考下
    2014-09-09
  • Lua table簡明總結(jié)

    Lua table簡明總結(jié)

    這篇文章主要介紹了Lua table簡明總結(jié),table是lua唯一的數(shù)據(jù)結(jié)構(gòu),table 是 lua 中最重要的數(shù)據(jù)類型,本文詳細(xì)講解了table的相關(guān)知識,需要的朋友可以參考下
    2014-10-10
  • 使用Lua來擴(kuò)展C++程序的方法

    使用Lua來擴(kuò)展C++程序的方法

    這篇文章主要介紹了使用Lua來擴(kuò)展C++程序的方法,盡管更多的時候人們或許會想用C++來擴(kuò)展Lua...需要的朋友可以參考下
    2015-07-07
  • LUA string庫使用小結(jié)

    LUA string庫使用小結(jié)

    這篇文章主要介紹了LUA string庫使用小結(jié),本文總結(jié)了簡單的模式串、格式化的模式串、模式串中的特殊字符、用'[]'創(chuàng)建字符集、在'[]'中使用連字符'-'等內(nèi)容,需要的朋友可以參考下
    2014-12-12
  • Lua的函數(shù)環(huán)境、包實(shí)例講解

    Lua的函數(shù)環(huán)境、包實(shí)例講解

    這篇文章主要介紹了Lua的函數(shù)環(huán)境、包實(shí)例講解,本文分別對函數(shù)環(huán)境、包的定義、實(shí)現(xiàn)方式、使用方式做了分解,需要的朋友可以參考下
    2014-09-09

最新評論

阜阳市| 巴彦县| 襄城县| 尚志市| 广西| 武清区| 平和县| 简阳市| 望谟县| 延川县| 泾川县| 连山| 宜良县| 高平市| 镇坪县| 白朗县| 灌阳县| 大余县| 潼关县| 会理县| 郎溪县| 花莲市| 靖边县| 丰顺县| 汶上县| 灵武市| 天峨县| 泊头市| 五峰| 庆元县| 阿克| 罗山县| 新营市| 清新县| 新平| 贺州市| 商洛市| 海安县| 浏阳市| 视频| 建昌县|