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

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

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

在Lua中,table如何安全的移除元素這點挺重要,因為如果不小心,會沒有正確的移除,造成內(nèi)存泄漏。

引子

比如有些朋友常常這么做,大家看有啥問題

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

復制代碼 代碼如下:

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é)果:
復制代碼 代碼如下:

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

有問題吧,20怎么還在?這就是在遍歷中刪除導致的。

如何做呢?

Let's get started!

復制代碼 代碼如下:

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


說明:一般我們不在循環(huán)中刪除,在循環(huán)中刪除會造成一些錯誤。這是可以建立一個remove表用來標記將要刪除的,如上面例子,把將要刪除的標記為true

方法1 從后往前刪除

復制代碼 代碼如下:

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

dump(test)


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


方法2 while刪除

復制代碼 代碼如下:

 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

復制代碼 代碼如下:

 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)

相關文章

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

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

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

    淺談chuck-lua中的多線程

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

    Lua教程(六):綁定一個簡單的C++類

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

    Lua利用cjson讀寫json示例分享

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

    Lua的迭代器使用中應該避免的問題和技巧

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

    lua開發(fā)中實現(xiàn)MVC框架的簡單應用

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

    Lua中的元方法__newindex詳解

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

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

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

    Lua中的弱引用介紹

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

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

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

最新評論

青岛市| 明水县| 那坡县| 安平县| 宝鸡市| 济南市| 翁牛特旗| 迭部县| 获嘉县| 天气| 桐梓县| 靖边县| 祁阳县| 武胜县| 马鞍山市| 固安县| 布尔津县| 蓬溪县| 广宗县| 柳林县| 岑溪市| 修武县| 安福县| 石棉县| 清新县| 南部县| 岳普湖县| 忻州市| 奉新县| 芦山县| 余庆县| 邛崃市| 招远市| 宁蒗| 佛山市| 平果县| 高邑县| 瑞丽市| 梅河口市| 罗甸县| 乌鲁木齐市|