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