Ruby map, each, collect, inject, reject, select quick reference
Last updated:map
Performs an action on each array element. The original array is not modified. Returns the modified array.
[1,2,3,4,5,6,7,8,9,10].map{|e| e*3 }
# returns [3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
each
Executes an action using as parameter each element of the array. Returns the unmodified array.
[1,2,3,4,5,6,7,8,9,10].each{|e| print e.to_s+"!" }
# prints "1!2!3!4!5!6!7!8!9!10!"
# returns [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
collect
Alias for map
inject
Takes an accumulator (sum) and changes it as many times as there are elements in the array. Returns the final value of the accumulator.
[1,2,3,4,5,6,7,8,9,10].inject{|sum,e| sum += e }
# returns 55
You can also specify an initial value as parameter before the block.
["bar","baz","quux"].inject("foo") {|acc,elem| acc + "!!" + elem }
# returns "foo!!bar!!baz!!quux"
reduce
Alias for inject
select
Runs an expression for each array element and, if it is true, that element gets added to the output which is returned. This is called filter in other languages.
[1,2,3,4,5,6,7,8,9,10].select{|el| el%2 == 0 }
# returns [2,4,6,8,10]
find
Take an expression and returns the first element for which the expression returns true:
[1,2,3,4,5,6,7,8,9,10].find{|el| el / 2 == 2 }
# returns 4
detect
Alias for find
reject
The opposite of select: runs an expression for each array element and includes that element in the output if the expression is false
[1,2,3,4,5,6,7,8,9,10].reject{|e| e==2 || e==8 }
# returns [1, 3, 4, 5, 6, 7, 9, 10]