Each, Collect, Map, Select, Find, Find_all….Oh My!

As I dive deeper into Ruby, iterators are used more frequently to retrieve data stored in the arrays. Some data could be stored deep down in the ocean (nested data) which means I will have to iterate over the arrays few times to get the information I need.

So, the big question is, which iterator or iterators should I use?

The bigger and more important question is, will it return the value or just print them?

I also wondered if others are struggling as well. So, in attempt to help myself as well as others, I have decided to blog about it.

Ruby has many built-in methods, but here are few iterators that has been used frequently: each, collect, map, select, find, and find_all.

These built-in methods iterate through each element in a collection, and do some magic work and returns the transformed data for us to use. Well, some do and some do not.


It does not transform the original data. We can print the result after code execution is done, but #each always return the original data.

def capitalize_names(animals)   animals.each do |animal|      puts animal.capitalize   endend

.collect and .map:

collect and map are the same. Unlike each, these two always return new transformed data. After iterating over each element in a collection, it will return the same number of elements as in the original collections.

   cap = animals.map do |animal|      animal.capitalize   end      print cap      return capend


select act as a filter machine. As code executes, it collects only the element that returns a true value. Then, it return new collection of elements.

   cap = animals.select do |animal|      animal.length > 3   end      print cap      return capend


find returns first element that is true. The first element that matches the executed code. If nothing meets the criteria, it will return nil.

   cap = animals.find do |animal|      animal.length > 3   end      print cap      return capend


find_all returns all element that is true after iterates over a collection. It does same thing as #select.

   cap = animals.find_all do |animal|      animal.length > 3   end      print cap      return capend