我有一个数组arr
。我想根据条件破坏性地删除元素arr
,返回删除的元素。
arr = [1,2,3]
arr.some_method{|a| a > 1} #=> [2, 3]
arr #=> [1]
我的第一次尝试是reject!
:
arr = [1,2,3]
arr.reject!{|a| a > 1}
但返回块和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}