Open In App

How to map/collect with index in Ruby?

Last Updated : 25 Apr, 2024
Improve
Improve
Like Article
Like
Save
Share
Report

Mapping or collecting elements with their corresponding indices in Ruby is a common requirement in various programming scenarios. Ruby provides several options to suit your needs.

Let’s explore four approaches to map or collect elements with their indices:

Approach 1: Using each_with_index

Below is the Code:

Ruby
array = ["a", "b", "c"]
array.each_with_index do |element, index|
  puts "Element: #{element}, Index: #{index}"
end

Output
Element: a, Index: 0
Element: b, Index: 1
Element: c, Index: 2

Explanation:

  • The each_with_index method iterates over each element in the array, providing both the element and its index to the block.
  • Within the block, you can perform any desired action using the element and index.

Approach 2: Using map.with_index

Below is the Code:

Ruby
array = ["a", "b", "c"]

mapped_array = array.map.with_index do |element, index|
  "Mapped Element #{index}: #{element}"
end

puts mapped_array

Output
Mapped Element 0: a
Mapped Element 1: b
Mapped Element 2: c

Explanation:

  • The map.with_index method chains the map method with the with_index method, allowing you to map elements along with their corresponding indices.
  • Within the block, you can perform any desired mapping operation using the element and index.

Approach 3: Using Enumerable#each_with_index

Below is the Code:

Ruby
array = ["a", "b", "c"]

array.enum_for(:each_with_index).map do |element, index|
  puts "Element: #{element}, Index: #{index}"
end

Output
Element: a, Index: 0
Element: b, Index: 1
Element: c, Index: 2

Explanation:

  • You can use enum_for(:each_with_index) to create an enumerator and then chain map to perform operations similar to each_with_index.
  • This approach allows you to handle cases where each_with_index is not directly applicable.

Approach 4: Using Range#each_with_index

Below is the Code:

Ruby
array = ["a", "b", "c"]

(0...array.length).each do |index|
  puts "Element: #{array[index]}, Index: #{index}"
end

Output
Element: a, Index: 0
Element: b, Index: 1
Element: c, Index: 2

Explanation:

  • This approach uses a range to iterate over indices and access elements within the array based on those indices.
  • It’s useful when you want to avoid directly iterating over array elements.

Conclusion

Mapping or collecting elements with their corresponding indices in Ruby provides flexibility and enhances the capability of handling data structures effectively.


Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads