单一删除方法!谓词从Array中取出元素,并返回删除

时间:2019-07-04 13:59:05

标签: ruby

我在文档中找不到执行以下操作的方法:

a = [1, 2, 3]
b = a.remove! {|x| x > 1}
puts a # [1]
puts b # [2, 3]

有一个select!方法可做类似的事情,但不接受谓词。 令我感到失望的是,delete_ifkeep_ifreject!select!改变了数组,但也返回了相同的数组。

目前,我可以分2个步骤实现这一目标,但也许有更好/更智能的选择?

a = [1, 2, 3]
b = a.reject {|x| x > 1}
a = a - b
puts a # [1]
puts b # [2, 3]

1 个答案:

答案 0 :(得分:4)

我不知道一种方法来一步一步完成,但是,如果像您在第二个示例中那样接受不从ruby方法中对a进行突变,则可以使用Enumerable#partition < / p>

a = [1, 2, 3]

# note that b is first because first array is for elements returning true
b, a = a.partition { |x| x > 1 }

puts a # [1]
puts b # [2, 3]