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

Lua table中安全移除元素的方法

 更新時(shí)間:2015年06月29日 08:47:02   投稿:junjie  
這篇文章主要介紹了Lua table中安全移除元素的方法,本文給出3種實(shí)現(xiàn)方法,分別是從后往前刪除和while刪除,需要的朋友可以參考下

在Lua中,table如何安全的移除元素這點(diǎn)挺重要,因?yàn)槿绻恍⌒?,?huì)沒(méi)有正確的移除,造成內(nèi)存泄漏。

引子

比如有些朋友常常這么做,大家看有啥問(wèn)題

將test表中的偶數(shù)移除掉

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

local test = { 2, 3, 4, 8, 9, 100, 20, 13, 15, 7, 11}
for i, v in ipairs( test ) do
    if v % 2 == 0 then
        table.remove(test, i)
    end
end

for i, v in ipairs( test ) do
    print(i .. "====" .. v)
end


打印結(jié)果:
復(fù)制代碼 代碼如下:

1====3
2====8
3====9
4====20
5====13
6====15
7====7
8====11
[Finished in 0.0s]

有問(wèn)題吧,20怎么還在?這就是在遍歷中刪除導(dǎo)致的。

如何做呢?

Let's get started!

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

local test = { 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p' }
local remove = { a = true, b = true, c = true, e = true, f = true, p = true }

local function dump(table)
    for k, v in pairs( table ) do
        print(k)
        print(v)
        print("*********")
    end
end


說(shuō)明:一般我們不在循環(huán)中刪除,在循環(huán)中刪除會(huì)造成一些錯(cuò)誤。這是可以建立一個(gè)remove表用來(lái)標(biāo)記將要?jiǎng)h除的,如上面例子,把將要?jiǎng)h除的標(biāo)記為true

方法1 從后往前刪除

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

for i = #test, 1, -1 do
    if remove[test[i]] then
        table.remove(test, i)
    end
end

dump(test)


為什么不從前往后,朋友們可以測(cè)試,table.remove操作后,后面的元素會(huì)往前移位,這時(shí)候后續(xù)的刪除索引對(duì)應(yīng)的元素已經(jīng)不是之前的索引對(duì)應(yīng)的元素了。


方法2 while刪除

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

 local i = 1
while i <= #test do
    if remove[test[i]] then
        table.remove(test, i)
    else
        i = i + 1
    end
end

方法3 quick中提供的removeItem

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

 function table.removeItem(list, item, removeAll)
    local rmCount = 0
    for i = 1, #list do
        if list[i - rmCount] == item then
            table.remove(list, i - rmCount)
            if removeAll then
                rmCount = rmCount + 1
            else
                break
            end
        end
    end
end

for k, v in pairs( remove ) do
    table.removeItem(test, k)
end

dump(test)

相關(guān)文章

  • Lua中ipair和pair的區(qū)別

    Lua中ipair和pair的區(qū)別

    這篇文章主要介紹了Lua中ipair和pair的區(qū)別,ipair和pair都是用來(lái)遍歷table用的,需要的朋友可以參考下
    2014-09-09
  • 淺談chuck-lua中的多線程

    淺談chuck-lua中的多線程

    Lua對(duì)多線程支持初步體驗(yàn)是本文要介紹的內(nèi)容,主要是來(lái)了解LUA中多線程的使用,,經(jīng)過(guò)反復(fù)的實(shí)驗(yàn)得到的結(jié)果是,lua不支持多線程,如何讓它支持?來(lái)看本文內(nèi)容。
    2015-07-07
  • Lua教程(六):綁定一個(gè)簡(jiǎn)單的C++類(lèi)

    Lua教程(六):綁定一個(gè)簡(jiǎn)單的C++類(lèi)

    這篇文章主要介紹了Lua教程(六):綁定一個(gè)簡(jiǎn)單的C++類(lèi),本文是最后一篇C/C++與Lua交互的教程,其他教程請(qǐng)參閱本文下方的相關(guān)文章,需要的朋友可以參考下
    2014-09-09
  • Lua利用cjson讀寫(xiě)json示例分享

    Lua利用cjson讀寫(xiě)json示例分享

    本文結(jié)合本人的實(shí)際使用經(jīng)驗(yàn)和代碼示例,介紹如何在Lua中對(duì)json進(jìn)行encode和decode,需要的朋友可以參考下
    2014-11-11
  • Lua的迭代器使用中應(yīng)該避免的問(wèn)題和技巧

    Lua的迭代器使用中應(yīng)該避免的問(wèn)題和技巧

    這篇文章主要介紹了Lua的迭代器使用中應(yīng)該避免的問(wèn)題和技巧,本文介紹了避免創(chuàng)建閉合函數(shù)、利用恒定狀態(tài)創(chuàng)造更多變量、不需要for循環(huán)的迭代器等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • lua開(kāi)發(fā)中實(shí)現(xiàn)MVC框架的簡(jiǎn)單應(yīng)用

    lua開(kāi)發(fā)中實(shí)現(xiàn)MVC框架的簡(jiǎn)單應(yīng)用

    最近的游戲項(xiàng)目中使用了lua腳本來(lái)開(kāi)發(fā),項(xiàng)目中用到了MVC框架,最近有朋友問(wèn)我怎么弄,在這里簡(jiǎn)單分享一下思路和一些開(kāi)發(fā)中的技巧。有需要的小伙伴可以參考下。
    2015-04-04
  • Lua中的元方法__newindex詳解

    Lua中的元方法__newindex詳解

    這篇文章主要介紹了Lua中的元方法__newindex詳解,本文講解了查詢(xún)與更新、監(jiān)控賦值、通過(guò)table給另一個(gè)table賦值等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • 詳解Lua中的數(shù)組概念知識(shí)

    詳解Lua中的數(shù)組概念知識(shí)

    這篇文章主要介紹了Lua中的數(shù)組概念知識(shí),是Lua入門(mén)學(xué)習(xí)中的基礎(chǔ),需要的朋友可以參考下
    2015-05-05
  • Lua中的弱引用介紹

    Lua中的弱引用介紹

    這篇文章主要介紹了Lua中的弱引用介紹,本文用一個(gè)實(shí)例講解了Lua弱引用的相關(guān)知識(shí),需要的朋友可以參考下
    2015-04-04
  • 把Lua函數(shù)傳遞到C/C++中實(shí)例

    把Lua函數(shù)傳遞到C/C++中實(shí)例

    這篇文章主要介紹了把Lua函數(shù)傳遞到C/C++中實(shí)例,本文先是分析了需求,然后給出解決方法,需要的朋友可以參考下
    2014-11-11

最新評(píng)論

中牟县| 阳山县| 岳阳县| 扎鲁特旗| 镇巴县| 太原市| 苗栗市| 东安县| 普宁市| 砀山县| 海晏县| 普陀区| 江孜县| 分宜县| 中阳县| 涪陵区| 民乐县| 孝义市| 西丰县| 大石桥市| 定陶县| 石首市| 钟山县| 博野县| 穆棱市| 涟水县| 乌什县| 陇南市| 和林格尔县| 玛纳斯县| 宜君县| 敦煌市| 汉寿县| 凉城县| 和静县| 衡阳县| 扎鲁特旗| 江孜县| 蕲春县| 泾川县| 杨浦区|