2015-09-27 14 views
3

我一直試圖找到一種方法來刪除表中的字符串有點像這樣:如何從表中刪除一個字符串

myTable = {'string1', 'string2'} 
table.remove(myTable, 'string1') 

,但我一直沒能找到反正做到這一點。有人可以幫忙嗎?

回答

2

table.remove accepts元素的位置作爲其第二個參數。如果您確定string1出現在第一個索引/位置;你可以使用:

table.remove(myTable, 1) 

或者,你必須使用一個循環:

for k, v in pairs(myTable) do -- ipairs can also be used instead of pairs 
    if v == 'string1' then 
     myTable[k] = nil 
     break 
    end 
end 
4

正如hjpotter92說,table.remove預計要刪除的位置,而不是價值,所以你將不得不尋找。下面的函數搜索值的位置,並使用table.remove確保表格保持有效序列。

function removeFirst(tbl, val) 
    for i, v in ipairs(tbl) do 
    if v == val then 
     return table.remove(tbl, i) 
    end 
    end 
end 

removeFirst(myTable, 'string1') 
+1

http://stackoverflow.com/questions/12394841/safely-remove-items-from-an-array-table-while-iterating#comment16660887_12397742 – hjpotter92

+1

這是'removeFirst'並沒有更好的這是線性時間。 lhf的答案是線性時間'removeAll',它可以更新爲使用'table.move' – ryanpattison