如何就地过滤Lua阵列?
如何就地过滤Lua阵列 例如,有一个如何就地过滤Lua阵列?,lua,Lua,如何就地过滤Lua阵列 例如,有一个{1,5,7}数组和一个函数(elem)返回elem>1 end,就地过滤函数应该将数组更改为{5,7}。还希望不要中断数组上的ipairs迭代,因此数组仍应以索引1开始 “数组”是指Lua表中以键1开始并通过连续整数键直到找到nil的部分。与您使用ipairs迭代相同,以下函数解决了此问题: function filter_inplace(arr, func) local new_index = 1 local size_orig = #ar
{1,5,7}
数组和一个函数(elem)返回elem>1 end
,就地过滤函数应该将数组更改为{5,7}
。还希望不要中断数组上的ipairs
迭代,因此数组仍应以索引1
开始
“数组”是指Lua表中以键
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
您的“Lua数组”构造有点太严格了
IPAIR
和#
在Lua表上“按顺序”操作,如您所述。但是,非正键和非整数键不影响它们,所以可以在这样的表中使用。你发明超级抽象问题只是为了写答案吗?这对任何人都有什么用处?你为什么需要在适当的地方这样做?@TomBlodget你可能是对的。我只是给出了最简单的定义。如果有任何其他“数组”定义的解决方案可以保持ipairs
正常工作,那么它也很有趣。你知道吗,我最好从我的问题中删除数组词,只关注ipairs
。谢谢。@小猪,我不能判断我自己是否错了或者没有开始一个话题。既然我提出了,我想没关系。。。