Explain
How to map/collect with index in Ruby?
You can use any of the following approaches to iterate over an array (or any Enumerable) with index while transforming each element:
1. Using each_with_index and collecting manually
fruits = ["apple", "banana", "cherry"]
result = []
fruits.each_with_index do |fruit, idx|
result << "#{idx} - #{fruit.upcase}"
end
puts result.inspect
# => ["0 - APPLE", "1 - BANANA", "2 - CHERRY"]
Here:
each_with_indexyields both the element and its index to the block.- You manually build a new array (
result) by pushing transformed elements.
2. Using map.with_index (a more functional style)
fruits = ["apple", "banana", "cherry"]
result = fruits.map.with_index do |fruit, idx|
"#{idx} - #{fruit.upcase}"
end
puts result.inspect
# => ["0 - APPLE", "1 - BANANA", "2 - CHERRY"]
With map.with_index:
mapreturns anEnumeratorif no block is given.- Then
with_indexis called on that enumerator. - The resulting enumerator is then used with the final block, allowing both value and index.
Recommended Courses
3. Using (0...array.size).map
If you prefer to iterate over a range of indexes explicitly:
fruits = ["apple", "banana", "cherry"]
result = (0...fruits.size).map do |idx|
"#{idx} - #{fruits[idx].upcase}"
end
puts result.inspect
# => ["0 - APPLE", "1 - BANANA", "2 - CHERRY"]
This approach is sometimes handy if you need the index separately for a different data source or if you’re dealing with multiple arrays of the same size.
Going Further
To master these and other Ruby patterns—and level up your system design knowledge—check out these DesignGurus.io resources:
- Grokking the Coding Interview: Patterns for Coding Questions – Learn essential coding patterns often tested in technical interviews.
- Grokking System Design Fundamentals – Dive into designing scalable, high-performance systems, crucial for advanced Ruby on Rails applications.
For personalized feedback from ex-FAANG engineers, explore the Coding Mock Interview or System Design Mock Interview.