当我在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
仍具有相同的值。
这样的事情存在吗? 非常感谢!
答案 0 :(得分:7)
使用reject
。
> newarr = myarr.reject{ |e| e.is_a?(String) }
=> [5, 7]
> myarr
=> ["foo", 5, 7, "bar"]
还有一个名为select
的相关方法与reject
的工作方式相同,只是保留谓词返回true的元素而不是拒绝它们。
答案 1 :(得分:3)
你想要Array#reject。