国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

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

2024-07-21 23:04:02
字體:
來源:轉載
供稿:網友

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

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

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

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字符串,每一次進行連接操作之后,其實就產生了新的字符串,不再是原來的那個了。

于是,不斷連接,就不斷產生新的字符串,產生新字符串是需要復制操作,隨著連接操作的不斷進行著,字符串越來越大,復制操作也就越來越耗時。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 闽侯县| 秦安县| 南涧| 长治市| 鹤岗市| 贵溪市| 丹阳市| 贵德县| 徐闻县| 绥芬河市| 重庆市| 烟台市| 丹江口市| 腾冲县| 宁海县| 利川市| 舞阳县| 稻城县| 咸宁市| 凤阳县| 同心县| 焦作市| 桃园县| 齐河县| 堆龙德庆县| 罗定市| 潞城市| 靖州| 措勤县| 娱乐| 临漳县| 平潭县| 同德县| 宜章县| 新丰县| 凤台县| 拜城县| 临汾市| 永丰县| 道孚县| 乌兰浩特市|