Ruby でインデックスを使用して配列をマップする

Nurudeen Ibrahim 2023年1月30日
  1. Ruby で map メソッドと each_with_index メソッドを組み合わせる
  2. Ruby で map メソッドと with_index メソッドを組み合わせる
  3. Ruby の範囲と一緒に map を使用する
Ruby でインデックスを使用して配列をマップする

map メソッドは Ruby で非常に便利であり、配列を別の配列に変換する必要がある場合に便利です。たとえば、以下のコードは map を使用して小文字の配列を大文字の配列に変換します。

コード例:

small_letters = ['a', 'b', 'c', 'd']
capital_letters = small_letters.map { |l| l.capitalize }
puts capital_letters

出力:

["A", "B", "C", "D"]

上記の例では、配列内の各文字のそれぞれのインデックスをマップして取得するとします。どうすればいいですか?以下にリストされているのは、それを達成するためのさまざまな方法です。

Ruby で map メソッドと each_with_index メソッドを組み合わせる

each_with_index は Ruby の列挙可能なメソッドです。

それは名前が示すことをします。配列またはハッシュを繰り返し処理し、各要素をそれぞれのインデックスで抽出します。each_with_index の結果で map を呼び出すと、インデックスにアクセスできます。

ここは、詳細な説明のための each_with_index の公式ドキュメントです。

コード例:

small_letters = ['a', 'b', 'c', 'd']
numbered_capital_letters = small_letters.each_with_index.map { |l, i| [i + 1, l.capitalize] }
puts numbered_capital_letters

出力:

[[1, "A"], [2, "B"], [3, "C"], [4, "D"]]

Ruby で map メソッドと with_index メソッドを組み合わせる

with_indexeach_with_index に似ていますが、わずかな違いがあります。

each_with_index とは異なり、with_index を配列で直接呼び出すことはできません。配列は、最初に明示的に列挙子に変換する必要があります。

map は変換を自動的に処理するため、ここでは実行順序が重要です。.with_index を呼び出す前に .map を呼び出してください。

コード例:

small_letters = ['a', 'b', 'c', 'd']
numbered_capital_letters = small_letters.map.with_index { |l, i| [i + 1, l.capitalize] }
puts numbered_capital_letters

出力:

[[1, "A"], [2, "B"], [3, "C"], [4, "D"]]

with_index は、インデックスの開始元となるインデックスのオフセットである引数を受け入れることにも言及する価値があります。 {} ブロック内で i + 1 を実行する代わりに、その引数を利用できます。

コード例:

small_letters = ['a', 'b', 'c', 'd']
numbered_capital_letters = small_letters.map.with_index(1) { |l, i| [i, l.capitalize] }
puts numbered_capital_letters

出力:

[[1, "A"], [2, "B"], [3, "C"], [4, "D"]]

ここは、詳細については with_index の公式ドキュメントです。

Ruby の範囲と一緒に map を使用する

Ruby 範囲は、開始と終了の値のセットです。

たとえば、1..10 または 1...11 は、1 から 10 までの値のセットを表す範囲です。これを map メソッドと一緒に使用して、上記の例と同じ結果を得ることができます。

コード例:

small_letters = ['a', 'b', 'c', 'd']
numbered_capital_letters = (0...small_letters.length).map { |i| [i + 1, small_letters[i].capitalize]  }
puts numbered_capital_letters

出力:

[[1, "A"], [2, "B"], [3, "C"], [4, "D"]]

関連記事 - Ruby Array

関連記事 - Ruby Map