Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ruby array (enumerable) method to select and reject into 2 arrays in 1 operation

# this code works
list = (0..20).to_a
# => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] 

odd = list.select { |x| x.odd? }
# => [1, 3, 5, 7, 9, 11, 13, 15, 17, 19] 

list.reject! { |x| x.odd? }
# => [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20] 

# but can i emulate this type of functionality with an enumerable method?
set = [1,5,10]
# => [1, 5, 10] 
one, five, ten = set
# => [1, 5, 10] 
one
# => 1 
five
# => 5 
ten
# => 10

# ------------------------------------------------
# method I am looking for ?
list = (0..20).to_a
odd, even = list.select_with_reject { |x| x.odd? }
# put the matching items into the first variable
# and the non-matching into the second
like image 537
house9 Avatar asked Apr 05 '13 23:04

house9


2 Answers

Sure, you can do:

odd, even = list.partition &:odd?
like image 97
pguardiario Avatar answered Oct 13 '22 20:10

pguardiario


odd = []
even = []
list = [1..20]
list.each {|x| x.odd? ? odd << x : even << x }
like image 21
duggiefresh Avatar answered Oct 13 '22 21:10

duggiefresh