Ruby on rails ruby soft delete_if方法?

Ruby on rails ruby soft delete_if方法?,ruby-on-rails,ruby,Ruby On Rails,Ruby,当我在ruby中有一个数组时,我可以在其上运行delete_if块。 问题是它会从数组中删除元素。我想要相同的功能,除了不更改原始数组,而是返回一个新数组,并移除对象 例如: myarr = ["foo", 5, 7, "bar"] newarr = myarr.delete_if { |e| e.is_a?(String) } 将[5,7]返回到newarr,但也将修改原始数组myarr 我本质上想要的是 myarr = ["foo", 5, 7, "bar"] newarr = myarr

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

例如:

myarr = ["foo", 5, 7, "bar"]
newarr = myarr.delete_if { |e| e.is_a?(String) }
将[5,7]返回到
newarr
,但也将修改原始数组
myarr

我本质上想要的是

myarr = ["foo", 5, 7, "bar"]
newarr = myarr.soft_delete_if { |e| e.is_a?(String) }
因此,
newarr
将具有值[5,7],但
myarr
仍具有相同的值

这样的东西存在吗?
非常感谢

使用
拒绝

> newarr = myarr.reject{ |e| e.is_a?(String) }
=> [5, 7]
> myarr
=> ["foo", 5, 7, "bar"]
还有一个相关的方法叫做
select
,其工作方式与
reject
相同,只是它保留谓词返回true的元素,而不是拒绝它们。

您需要的