如何就地过滤 Lua 数组?
例如,有一个数组 { 1, 5, 7 }和一个函数function(elem) return elem > 1 end,就地过滤函数应将数组更改为{ 5, 7 }。还希望不要中断ipairs数组上的迭代,因此数组仍应以索引开头1。
我所说的“数组”是指 Lua 表的一部分,它以 key 开头1,遍历连续的整数键,直到找到nil. 你用 迭代同样的事情ipairs。
下面的函数解决了这个问题:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7665 次 |
| 最近记录: |