Let’s talk about the grep
method.
What can this method do for you?
You can use Grep to filter enumerable objects, like Arrays & Ranges.
“But select already does that!”
Yes, but grep works in a different way & it produces different results.
Let’s see some examples.
Ruby Grep Method Examples
Given this array:
objects = ["a", "b", "c", 1, 2, 3, nil]
You can use grep to get only the strings:
objects.grep(String)
# ["a", "b", "c"]
Only the Integers:
objects.grep(Integer)
# [1, 2, 3]
Or everything that isn’t nil:
objects.grep_v(NilClass)
# ["a", "b", "c", 1, 2, 3]
If you have an array of words:
fruit = ["apple", "orange", "banana"]
You can find all the words that start with “a”:
fruit.grep(/^a/)
# ["apple"]
Or that end with “e”:
fruit.grep(/e$/)
# ["apple", "orange"]
And if you have a list of numbers:
numbers = [9, 10, 11, 20]
You can get a list of all the numbers within a range:
numbers.grep(5..10)
# [9, 10]
You can combine the map method & select into one when you use a block:
numbers.grep(5..10) { |n| n * 2 }
# [18, 20]
If you want to get fancy…
times_two = ->(x) { x * 2 }
numbers.grep(5..10, ×_two)
# [18, 20]
Pretty cool, right?
Grep vs Select: Understanding The Difference
How does grep work?
The trick is with the ===
method (triple equals) in Ruby.
Grep calls this method on whatever argument you pass to it.
And it turns out that classes, regular expressions & ranges all implement ===
.
They implement this method in a way that makes sense for the class.
For example:
- Classes (like
Integer
or Array
), compare with the given object class.
- Ranges check if the number is included in the range.
- Regular expressions check if there is a match.
So when you say:
objects.grep(Integer)
What you’re really saying is:
objects.select { |obj| Integer === obj }
For a long time, I was confused about grep…
Until I understood this.
The select
method filters a list based on the results of the block.
If the block evaluates to true, then that element gets chosen.
But grep
just compares two things using ===
.
You could say that grep is a more specialized version of select!
Ruby Grep Mindmap

Watch Video Tutorial
Summary
You learned about the grep method in Ruby! It’s a very helpful method when you understand how it works.
Make sure to practice to let this sink in.
Practice is the key to mastery!