如何过滤Lua数组?

时间:2018-04-07 17:23:51

标签: lua

如何过滤Lua数组? 有一个函数(谓词)接受一个元素并返回true如果元素匹配,如何过滤给定的数组?

例如,如果有一个{ 1, 2, 3 }数组和一个函数function(elem) return elem > 1 end,则过滤函数应该从表中删除元素“1”。还希望不要在数组上中断ipairs次迭代,因此数组仍应以索引1开头。

“数组”是指Lua表中以键1开头并经过连续整数键直到找到nil的部分。您使用ipairs迭代同样的事情。

1 个答案:

答案 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