Ruby でインデックスを使用して配列をマップする
-
Ruby で
map
メソッドとeach_with_index
メソッドを組み合わせる -
Ruby で
map
メソッドとwith_index
メソッドを組み合わせる -
Ruby の範囲と一緒に
map
を使用する
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_index
は each_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"]]