Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何就地过滤Lua阵列?_Lua - Fatal编程技术网

如何就地过滤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

如何就地过滤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 = #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
。谢谢。@小猪,我不能判断我自己是否错了或者没有开始一个话题。既然我提出了,我想没关系。。。