Rubyのmapメソッド完全ガイド!配列・ハッシュのデータ変換を実例で解説
Rubyのmapメソッドは、配列(Array)・ハッシュ(Hash)・範囲(Range)といったコレクションに対して使用できる強力なメソッドです。
mapの主な用途は、データの変換です。
例えば、文字列の配列があった場合、すべての文字列を順番に処理して、各文字を大文字に変換することができます。
また、Userオブジェクトのリストがある場合も同様です。
それらを変換して、対応するメールアドレスや電話番号など、Userクラスに定義された任意の属性のリストを作成できます。
それでは、具体的な使い方を見ていきましょう!
Ruby mapメソッドの基本構文
mapの構文は次のようになっています。
array = ["a", "b", "c"]
array.map { |string| string.upcase }
# ["A", "B", "C"]
まず対象となる配列を用意します。ハッシュや範囲オブジェクトでも同じように扱えます。
次に、ブロックを付けてmapを呼び出します。
ブロックとは、波括弧 { ... } で囲まれた部分のことです。ブロックの中には、配列の各要素をどのように変換するかを記述します。イメージとしては関数に近いものです。
では、mapを呼び出すと何が起こるのでしょうか?
mapは変換結果を格納した新しい配列を返します。
元の配列は変更されません。
もし元の配列自体を書き換えたい場合は、破壊的メソッドである map! を使用してください。
Ruby mapの実用例
ここで、実際の開発で役立つ例をいくつか紹介します。
数値を2倍にする
array = [1,2,3]
array.map { |n| n * 2 }
# [2, 4, 6]
文字列を整数に変換する
array = ["11", "21", "5"]
array.map { |str| str.to_i }
# [11, 21, 5]
ハッシュの値をシンボルに変換する
hash = { bacon: "protein", apple: "fruit" }
hash.map { |k,v| [k, v.to_sym] }.to_h
# {:bacon=>:protein, :apple=>:fruit}
このハッシュの例について少し補足します。
先ほどの例では、ブロック引数が2つになっていますね。これは、ハッシュの要素がキーと値のペアで構成されているためです。
そして、変換後のキーと値を組み合わせた新しい配列を返しています。
最後に to_h を呼び出して、この配列を再びハッシュへと変換しています。
Ruby mapとeachの違い
mapとeachには、どのような違いがあるのでしょうか?
eachは、mapのもっと原始的なバージョンのようなものです。
eachは各要素を取り出して処理することはできますが、その結果を収集しません。
eachは常に元のオブジェクトをそのまま返します。
一方、mapはeachと同じように要素を一つずつ処理しますが、そのうえで…
変換後の要素からなる新しい配列を返します。
例:
array.each { |n| n * 2 }
# [1, 2, 3]
array.map { |n| n * 2 }
# [2, 4, 6]
Ruby mapとcollectの違い
実は、mapとcollectはまったく同じメソッドです。
同じ機能に対する別名にすぎません!
では、どちらを使うべきでしょうか?
オープンソースプロジェクトのコードを読んでみると、最もよく使われているのは map です。
迷ったらmapを選びましょう。
mapでインデックスを使う方法(with_index)
要素と一緒にインデックス番号も取得したい場合は、with_index メソッドを使います。
以下はその例です:
array = %w(a b c)
array.map.with_index { |ch, idx| [ch, idx] }
# [["a", 0], ["b", 1], ["c", 2]]
おまけのヒント:
with_index には引数を渡せるため、インデックスを0以外の数値から開始させることもできます。
mapの省略記法(map &)
引数を必要としないメソッドを呼び出す場合は、mapの省略記法を使うことができます。
例:
["11", "21", "5"].map(&:to_i)
例:
["orange", "apple", "banana"].map(&:class)
この & 構文は map に限ったものではなく、他のEnumerable系のメソッドでも利用できます。
mapメソッドのマインドマップ

まとめ
この記事では、Rubyのmapメソッドとその使い方について学びました。あわせて、each、map、collectの違いについても理解を深めることができたはずです。
この記事が役に立ったと思ったら、ぜひRuby仲間にもシェアしてください🙂
ご覧いただきありがとうございました!
-
Rubyのgrepメソッド徹底解説!使い方とselectとの違いを実例で学ぶ
今回はRubyのgrepメソッドについて詳しく見ていきます。 このメソッドにはどんな便利さがあるのでしょうか? grepを使えば、配列(Array)や範囲(Range)など、Enumerableモジュールを含むオブジェクトから、条件に一致する要素だけを効率よく抽出できます。 「それってselectでも同じことができるのでは?」 確かにそうですが、grepはselectとは異なる仕組みで動作し、得られる結果も異なります。この違いを理解すれば、コードをより簡潔に書けるようになりますよ。 それでは、実際の例を見てみましょう。 Ruby grepメソッドの実例集 まず、次のような配列を用意します。
-
Rubyの配列(Array)クラスの使い方徹底解説!基本操作と便利なメソッド一覧
配列(Array)とは? 配列はRubyに組み込まれたクラスで、0個以上の要素をリスト形式で保持することができます。さらに、要素の追加・アクセス・繰り返し処理を簡単に行えるメソッドも多数用意されています。 もし配列が存在しなければ、値ごとに個別の変数を用意しなければならず、管理が非常に大変になります。 例: a = 1 b = 2 c = 3 しかし、配列を使えば次のように書けます: numbers = [1, 2, 3] さらに嬉しいことに、配列の中には何でも入れられます! 例えば: 数値 文字列 さらに別の配列!(これは多次元配列になります) それでは、配列を最大限に活用できる