【初心者向け】配列から要素を取り出す eachとmap【Ruby】

本記事はこんな方向けです。

  • 配列とハッシュの使い方を知りたい方
  • 要素の取り出し方を知りたい方
  • eachやmapがよく分からない方
ケイ
ケイ

こんにちは!
Webアプリ開発中のケイ(@new_design)です。

今回は配列ハッシュから要素を取り出す方法について解説していきます。

ここで紹介する考え方を理解できていれば、JavascriptPythonなど他の言語でも応用が可能なので、ぜひ頑張って学んでいきましょう!

ケイ
ケイ

エンジニアの採用試験でも『配列』や『ハッシュ』の理解が求められるよ!!

Rubyの実行環境を準備しよう

通常Rubyのプログラムを実行するためには色々と面倒な実行環境の構築が必要になりますが、今回はreplitを使って解説していきます。

既にreplitを使ったことのある方や他の同じようなサービスを使っている方は、読み飛ばして頂いてOKです。

①まずはreplitをブラウザで開きます。

②言語選択窓に「Ruby」を入力して選択

③Create replボタンを実行

④下画面が表示されることを確認する

⑤「print “Hello Ruby”」と入力し、Runを押す

右側の黒い画面に実行結果が表示されたらOKです。
これでRubyの実行環境が整いました。

配列から要素を取り出す each編

では配列から要素(オブジェクト)を取り出す方法について解説していきます。まずは配列を作ってやります。

members = ["太郎","次郎","若座右衛門"]

このmembersという配列から要素を取り出して、「私は〇〇です。」と自己紹介させたいと思います。

まずはイケてないやり方を紹介します。彼女の前でこんなコードを書いたら間違いなく振られます。

members = ["太郎","次郎","若座右衛門"]
puts "私は#{members[0]}です。"
puts "私は#{members[1]}です。"
puts "私は#{members[2]}です。"

#実行結果
#私は太郎です。
#私は次郎です。
#私は若座右衛門です。

期待した出力結果は得られましたが、membersの要素が1,000個あればしんどいですよね?腱鞘炎で入院しますよね?

そこで「each」メソッドを使います。eachメソッドはオブジェクト(配列やハッシュなど)から要素を取り出す場合に使用できます。

members = ["太郎","次郎","若座右衛門"]
members.each do |member|
  puts "私は#{member}です。"
end

#実行結果
#私は太郎です。
#私は次郎です。
#私は若座右衛門です。

eachを使っても先程のイケてない方法と同じ結果が得られました。ちなみに|member|としていますが、どんな文字でも問題ありません。

一般的に取り出される親(今回はmembers)の単数形にしておけば、コードが分かりやすくなるのでmemberとしています。

配列から要素とインデックスを取り出す

もう少しステップアップするために今度は配列から要素とインデックスを取り出しましょう。

配列のインデックス

プログラミング初心者あるあるですが、要素の順番とインデックスの値は異なるので注意しましょう!

先程の配列から要素を取り出して、「〇〇番目は〇〇です。」と表示させたいとします。

members = ["太郎","次郎","若座右衛門"]

そうなるとeachメソッドでは難しそうですね。そこでeach_with_indexメソッドを使います。

members = ["太郎","次郎","若座右衛門"]
members.each_with_index do |member,index|
  puts "#{index}番目の#{member}です。"
end

#実行結果
#0番目の太郎です。
#1番目の次郎です。
#2番目の若座右衛門です。

これで順番も出力できましたが、0番目というのは不自然ですね。そこで下記のように修正してあげましょう。

members = ["太郎","次郎","若座右衛門"]
members.each_with_index do |member,index|
  puts "#{index+1}番目の#{member}です。"
end

#実行結果
#1番目の太郎です。
#2番目の次郎です。
#3番目の若座右衛門です。

これで配列の要素インデックスを取り出すことができました。

配列から取り出して配列に格納するmap

次は配列から要素を取り出して、何か処理を加えた上で配列に再度格納する方法を解説していきます。割と配列のままにした方が扱いづらいという大人の事情があるわけですよ。

数字が入ったnumbersという配列があったとします。

numbers = [100,200,300,400]

中身の要素の全てに5をかけた配列にしたい場合はどうすれば良いでしょうか。
まずはイケてないやり方を紹介します。

numbers = [100,200,300,400]
numbers_change = []
numbers.each do |number|
  numbers_change.push(number*5)
end
p numbers_change

#実行結果
#[500, 1000, 1500, 2000]

上記コードはこんな感じの処理を行っています。ちなみに配列に要素を追加する際にpushメソッドを使うので覚えておきましょう。

  1. まずは配列からeachメソッドを使い、要素を取り出す。
  2. 取り出した要素を5倍する
  3. 5倍した要素をpushメソッドでnumbers_changeという空の配列に格納する

期待する結果は得られましたが、ダサいし長いですよね。これは確実に彼女に背負い投げされるコードです。

ここで使うのがmapメソッドです。mapは配列から要素を取り出して、処理を加えて再度配列に格納してくれる便利なやつです。

ではmapでコードを書き直しましょう。

numbers = [100,200,300,400]
results = numbers.map do |number|
  number*5
end
p results

#出力結果
#[500, 1000, 1500, 2000]

これで空の配列を使わなくても良いし、コードもすっきりしましたね。

Rubyを学習し始めた頃はeachやらmapやら色々とメソッドが出てきますが、何度もコードを書いていると慣れてきます。

Rubyの使い方に慣れたらRuby on RailsでTwitterなどのWebアプリケーションを作ってみてはいかがでしょうか?独学だと難しいと感じる方はぜひデイトラでの学習をおすすめします。

少しでも興味がある方は下記記事でデイトラの評判をまとめていますので、ぜひ参考にしてみてください。

【徹底レビュー】デイトラの評判は?コスパ最強!【プログラミング】

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です