2015-01-04 17 views
0

我正在尋找一種方法來對數組執行某些操作(例如delete_if)並返回兩個已刪除的元素,剩下的元素。Ruby,對數組執行操作並返回新數組,並且「更改」

例如

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

@falsetru yes ..我的壞,我做了一個編輯 – user2840647

回答

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]] 
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]] 
相關問題