如何删除返回已删除元素的数组元素

p11*_*00i 3 ruby arrays

我有一个阵列arr.我想arr根据条件破坏性地删除元素,返回已删除的元素.

arr = [1,2,3]  
arr.some_method{|a| a > 1} #=> [2, 3]
arr #=> [1]
Run Code Online (Sandbox Code Playgroud)

我的第一次尝试是reject!:

arr = [1,2,3]  
arr.reject!{|a| a > 1}
Run Code Online (Sandbox Code Playgroud)

但是返回的块和arr值都是[1].

我可以写一个自定义函数,但我认为有一个明确的方法.那会是什么?

问题得到解答后更新:

partition对于实现哈希的这种行为,该方法也很有用.如何删除哈希的元素,返回已删除的元素和修改后的哈希?

hash = {:x => 1, :y => 2, :z => 3}
comp_hash, hash = hash.partition{|k,v| v > 1}.map{|a| Hash[a]}
comp_hash #=> {:y=>2, :z=>3}
hash #=> {:x=>1}
Run Code Online (Sandbox Code Playgroud)

rob*_*nst 5

我在partition这里用.它不会在内部修改self,但会返回两个新数组.通过arr再次分配第二个数组,它可以获得您想要的结果:

comp_arr, arr = arr.partition { |a| a > 1 }
Run Code Online (Sandbox Code Playgroud)

请参阅分区文档.