Railsで配列を扱うときには、mapメソッドの使い方を知っていると便利です。Railsで配列を扱う際に、まず知っておくべきメソッドともいえるでしょう。本記事では、mapメソッドの基本的な使い方について、サンプルを交えてご紹介します。
mapメソッドとは
Railsで使えるmapメソッドとは、配列に格納されている各要素に対し、順に処理を実行してくれる働きをするメソッドです。配列の個々の要素を取り出し、それぞれの要素に対して処理を行います。
言葉による少し抽象的ともいえる説明よりも、実際にプログラムの動きをコードで追った方が理解しやすいでしょう。ここからは、実際のサンプルコードなどを交え、プログラムコードを追いながらmapの動きや機能を確認しましょう。
mapメソッドの使い方と書き方
Railsのmapメソッドは、配列に対する操作が行えます。結果を確認しやすいデータを配列に入れ、サンプルコードを動かしてみましょう。まずは、サンプルコードを動かし、その実行結果からコードの意味とmapの動きを理解しましょう。
mapメソッドの基本的な書き方
Railsのmapメソッドは、以下の構文に則って記述します。配列に対するメソッドとして記述し、配列に対して行う処理を{}内に記述します。Loop文などの繰り返し処理と同じイメージで記述します。
【mapの基本構文】
配列変数.map {|変数名| 具体的な処理 }
以下のサンプルコードでは、mapメソッドを使ったたった1行のコードで、配列の内容がログに書き込まれます。
サンプルコード |
---|
array = ["sato", "suzuki", "tanaka", "takahashi"] |
戻り値を使用する方法
mapメソッドでは、処理を行うだけでなく、処理結果を戻り値として取得することもできます。サンプルとして、小文字ばかりの配列を大文字に変える処理を考えてみましょう。
【サンプルデータ】
array = ["sato", "suzuki", "tanaka", "takahashi"]
【サンプルコード】
upcaseメソッドを使って大文字に変換します。
array.map {|item| item.upcase }
array.mapの結果確認
サンプルコードを実行し、サンプルデータであるarray配列の内容を確認してみましょう。arrayの内容は変わっていないはずです。
「item.upcase」では、itemに取り出した値を大文字に変えているだけで、array配列に戻していません。upcaseメソッドの結果が知りたければ、以下のように記述します。
array.mapの戻り値を確認するコード記述
array.map {|item| item.upcase }
というコードを記述するだけでなく、戻り値を配列にセットすれば、upcaseメソッドの結果を残すことができます。
【戻り値を取得するコード記述】
array1 = array.map {|item| item.upcase }
このコードを実行後、array配列とarray1配列の内容は以下のようになります。array配列に直接値を戻すことも可能です。
実行後の配列要素の値 | |
---|---|
array | [“sato”, “suzuki”, “tanaka”, “takahashi”] |
array1 | [“SATO”, “SUZUKI”, “TANAKA”, “TAKAHASHI”] |
各要素で処理を行う方法
Railsのmapメソッドを使って、配列の要素を処理する方法について、具体的に見ていきましょう。ここまでと同じサンプルを使って、mapメソッドによって配列の要素がどう処理されていくか、確認してみましょう。
【サンプルコード】
array = ["sato", "suzuki", "tanaka", "takahashi"]
array.map {|item| item.upcase }
具体的に処理を見る方法
Railsのmapを使用する過程を参照してみましょう。サンプルコードのままだと、array配列の内容は一瞬で変換されるものの、変換結果が保存されないため、どう処理が行われたのか、確認できません。
過程を確認するためには、個々の処理のあと処理結果を確認するコードを記述してみましょう。
【サンプルコード】
array.map do |item|
p item.upcase
end
p array
実行結果
サンプルコードを実行すると、1要素を処理するたびに標準出力(コンソール)に処理結果が出力されます。最後にarray配列の内容を再確認します。
【実行結果】
"SATO"
"SUZUKI"
"TANAKA"
"TAKAHASHI"
["sato", "suzuki", "tanaka", "takahashi"]
各要素の処理過程では大文字に変換されており、その結果はarray配列には反映されていないことがわかります。
戻り値を使用する方法
mapを使って配列の各要素に対して処理を行ったあと、その結果を配列に戻す方法について確認してみましょう。
【戻り値を取得するコード記述】
①array1 = array.map {|item| item.upcase }
②array = array.map {|item| item.upcase }
①のサンプルコードでは、array1という別配列に戻り値をセットします。②では元配列arrayに値を戻します。
実行確認 |
---|
【実行コード】array = ["sato", "suzuki", "tanaka", "takahashi"] |
【実行結果】 [“SATO”, “SUZUKI”, “TANAKA”, “TAKAHASHI”] [“sato”, “suzuki”, “tanaka”, “takahashi”] [“SATO”, “SUZUKI”, “TANAKA”, “TAKAHASHI”] |
元の配列に直接処理結果を戻す方法
サンプルコードを実行しただけでは、元配列arrayに処理が戻されないということを、実行結果から確認してきました。元配列に処理結果をセットするというという記述が必要でしたが、mapとよく似たメソッドmap!を使うと、元配列に直接書き込むことができます。
【サンプルコード】
①array.map {|item| item.upcase }
②array.map! {|item| item.upcase }
実行確認 |
---|
【実行コード】array = ["sato", "suzuki", "tanaka", "takahashi"] |
【実行結果】 [“sato”, “suzuki”, “tanaka”, “takahashi”] [“SATO”, “SUZUKI”, “TANAKA”, “TAKAHASHI”] |
hashでも使用が可能
Railsのmapメソッドは、「配列.map」の形式で使用しますが、「配列」としてハッシュも使えます。
【サンプルコード】
hash = {sato:"shiori",suzuki:"ichiro",tanaka:"kakuei"}
array = hash.map {|k,v| v.upcase }
ハッシュと配列では形式が結構異なりますが、ハッシュのキーと、要素の変数を与えることで、アクセス可能になります。
mapと同じように使える機能
Railsでは、配列の要素に対して処理を行えるメソッドはmap以外にも複数存在します。それぞれ、処理の仕方や用途などが異なります。
mapメソッドを使った方が処理やコード記述が簡単な場合もあれば、用途によってはさらに使いやすいメソッドがあることもあります。また、メソッドを使わずに、Loopなどの繰り返し処理を行うことで、複雑な処理が可能になることもあります。
selectメソッド
Railsのselectメソッドを使うと、配列の要素の中から条件にあった要素のみを取り出すことができます。以下のサンプルコードでは、「ta」を含む要素のみを取り出しています。
【サンプルコード】
array = array.select {|item| item.include?("ta") }
p array
【実行結果】
["tanaka", "takahashi"]
collectメソッド
Railsのmapメソッドと類似の使い方ができるメソッドをご紹介していますが、collectメソッドは「類似」ではなく「同一」機能のメソッドです。リファレンスにも「collectメソッドの別名」と明記されています。
collectメソッドとmapメソッドに使い分けは必要なく、実装者の好みで使用できます。
【サンプルコード】
array = array.collect {|item| item.upcase }
Railsの配列処理にmapを使ってみよう!
Railsのmapメソッドの基本的な使い方を理解できたでしょうか。mapメソッドは、Railsで配列を扱う場合には、まず基本として覚えておきたいメソッドです。簡単な処理であれば、1行のコード記述で配列全要素の処理を行えます。
習うより慣れろという言葉通り、mapを使って色々な配列操作のコードを記述し、実行結果を確認して覚えていきましょう。