我正在寻找一种方法来对数组执行某个操作(例如delete_if)并返回已删除的元素和剩余的元素。
例如
a = [1,2,3,4,5,6,7,8,9,10]
a.delete_if {|x| x.even? } #=> [[1, 3, 5, 7, 9]]
但我要找的是像
a = [1,2,3,4,5,6,7,8,9,10]
a.some_operation #=> [[1,3,5,7,9],[2,4,6,8,10]]
我将如何做到这一点?
答案 0 :(得分:3)
a = [1,2,3,4,5,6,7,8,9,10]
a.partition &:even?
# => [[2, 4, 6, 8, 10], [1, 3, 5, 7, 9]]
Enumerable#partition
返回值的第一个元素包含在块中计算为true的元素。所以你需要使用odd?
来获得你想要的东西。
a.partition &:odd?
# => [[1, 3, 5, 7, 9], [2, 4, 6, 8, 10]]
答案 1 :(得分:1)
你可能正在寻找这样的东西:
a = [1,2,3,4,5,6,7,8,9,10]
a.group_by { |x| x.even? }.values
#=> [[1, 3, 5, 7, 9], [2, 4, 6, 8, 10]]