Ruby,对数组执行操作并返回新数组,以及n#34;更改"

时间:2015-01-04 07:34:50

标签: ruby arrays

我正在寻找一种方法来对数组执行某个操作(例如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]]

我将如何做到这一点?

2 个答案:

答案 0 :(得分:3)

使用Enumerable#partition

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]]