ruby soft delete_if方法?

Yuv*_*rmi 2 ruby ruby-on-rails

当我在ruby中有一个数组时,我可以在其上运行一个delete_if块.问题是它从我的数组中删除了元素.我想要相同的功能,除了不对原始数组进行更改,而是返回一个删除了对象的新数组.

例如:

myarr = ["foo", 5, 7, "bar"]
newarr = myarr.delete_if { |e| e.is_a?(String) }
Run Code Online (Sandbox Code Playgroud)

会返回[5,7] newarr,但也会修改原始数组,myarr.

我基本上寻找的是

myarr = ["foo", 5, 7, "bar"]
newarr = myarr.soft_delete_if { |e| e.is_a?(String) }
Run Code Online (Sandbox Code Playgroud)

所以newarr它将具有值[5,7],但myarr仍然具有相同的值.

这样的事情存在吗?非常感谢!

Mar*_*ers 7

使用reject.

> newarr = myarr.reject{ |e| e.is_a?(String) }
=> [5, 7]
> myarr
=> ["foo", 5, 7, "bar"]
Run Code Online (Sandbox Code Playgroud)

还有一种叫相关方法select,其在相同的方式工作reject,除了它保持了该谓词返回true,而不是排斥他们的元素.