lua 使用remove刪除table資料

2021-09-02 15:01:09 字數 1314 閱讀 5779

在lua語言中,一切皆是table,所有資料,函式都儲存在table中,但是當我們使用了table後,該如何清理table表中資料呢。

先看乙個函式:

table.remove(table[,pos]):刪除在pos位置上的元素,後面的元素會向前一棟,然後刪除的index會向前移動,導致刪除後的資料不是你想要的。當不填入pos時,刪除table末尾的資料。

看如下**:

local array = 

for i,v in ipairs(array) do

if v == "a" then

table.remove(array, i)

endendfor i,v in ipairs(array) do

print(i,v)

end

上面我們想要刪除table表中所有「a」資料,但是輸出結果並沒有將所有「a」資料刪除。所以我們想連續刪除表中資料不能這樣使用,下面是正確刪除方法。

for i=#array,1,-1 do

if array[i] == "a" then

table.remove(array, i)

endendfor i,v in ipairs(array) do

print(i,v)

end

這樣就能得到正確的刪除結果了。

所以我們可以封裝乙個函式

-- 刪除table表中符合conditionfunc的資料

-- @param tb 要刪除資料的table

-- @param conditionfunc 符合要刪除的資料的條件函式

local function table.removetabledata(tb, conditionfunc)

-- body

if tb ~= nil and next(tb) ~= nil then

-- todo

for i = #tb, 1, -1 do

if conditionfunc(tb[i]) then

-- todo

table.remove(tb, i)

endend

endend-- 刪除資料是否符合條件

-- @param data 要刪除的資料

-- @return 返回是否符合刪除data條件

local function removecondition(data)

-- body

-- todo data 符合刪除的條件

return true

end

remove刪除元素

用列表的方法.remove 刪除列表中元素的時候,會改變列表的下標,從而發生出乎意料的錯誤。所以如果想要刪除列表中元素,可以用如下方法 錯誤的方法 a 1,2,3,4,5 b 1,2 for i in a if i in b a.remove i a 2,3,4,5 思考 刪除元素之後index是如...

Jsoup 刪除 remove的正確寫法

參考了一下這個例子,但是很遺憾,效果不大,要點在於jsoup的remove不能用賦值語句操作,否則就會出現這篇文章裡提到的情況 正確的做法是不要用等號賦值,elements.select class storyblock remove elements.select div remove eleme...

在lua中如何remove掉table裡面的資料

在lua開發中,資料儲存一般都會用tabel來儲存,但是在用到table之後,我們都會去清理table,那麼我該怎麼做呢?我們會呼叫到table中的remove函式來清理,但是需要注意的是,remove table,pos 刪除在pos位置上的元素,後面的元素會向前一棟,然後刪除的index會向前移...