如何过滤Lua数组?
有一个函数(谓词)接受一个元素并返回true
如果元素匹配,如何过滤给定的数组?
例如,如果有一个{ 1, 2, 3 }
数组和一个函数function(elem) return elem > 1 end
,则过滤函数应该从表中删除元素“1”。还希望不要在数组上中断ipairs
次迭代,因此数组仍应以索引1
开头。
“数组”是指Lua表中以键1
开头并经过连续整数键直到找到nil
的部分。您使用ipairs
迭代同样的事情。
答案 0 :(得分:0)
以下功能解决了这个问题:
function filter_inplace(arr, func)
local new_index = 1
local size_orig = #arr
for old_index, v in ipairs(arr) do
if func(v, old_index) then
arr[new_index] = v
new_index = new_index + 1
end
end
for i = new_index, size_orig do arr[i] = nil end
end