Rubyプログラミングの配列で覚えるべきメソッドまとめ


こんにちは。Tomoyuki(@tomoyuki65)です。

Rubyの配列の使い方を理解した方は、使用頻度が高いメソッドも覚えましょう。

 

特にリファクタリング時に使えないかを検討すると良いと思います。

 

この記事では、配列で覚えるべきメソッドについて解説します。

 



map(collect)

mapメソッド(エイリアスメソッドはcollect)は、配列の各要素に対してブロックを評価した結果を新しい配列にして返します。

 

例えば以下のようなプログラムがあったとします。

# 配列の各要素を3で割った余りを新しい配列に格納する場合
num = [10, 20, 30]
new_num = []
num.each { |n| new_num << n % 3 }
p new_num
実行結果
[1, 2, 0]

 

次のように書き換えることができます。

# 配列の各要素を3で割った余りを新しい配列に格納する場合
num = [10, 20, 30]
new_num = num.map { |n| n % 3 }
p new_num
実行結果
[1, 2, 0]

 

このように、空の配列を用意して他の配列の要素を詰め込むような処理は、mapメソッドに置き換えることが可能です。

 

select(find_all)、reject

selectメソッド(エイリアスメソッドはfind_all)は、各要素に対してブロックを評価し、その戻り値が真の要素を集めた配列を返します。

 

例として、次のプログラムを実行してみて下さい。

# 3以上の数値を新しい配列に格納する場合
num = [1, 2, 3, 4, 5]
new_num = num.select { |n| n >= 3 }
p new_num

 

実行結果は以下の通りです。

実行結果
[3, 4, 5]

 

rejectの場合

rejectはselectの反対で、偽の要素を集めた配列を返します。

例として、次のプログラムを実行してみて下さい。

# 3以上でない数値を新しい配列に格納する場合
num = [1, 2, 3, 4, 5]
new_num = num.reject { |n| n >= 3 }
p new_num

 

実行結果は以下の通りです。

実行結果
[1, 2]

 

find(detect)

find(エイリアスメソッドはdetect)は、ブロックの戻り値が真になった最初の要素を返します。

 

例として、次のプログラムを実行してみて下さい。

# 15で割り切れる数値を新しい配列に格納する場合
num = [10, 20, 30, 40, 50, 60]
new_num = num.find { |n| n % 15 == 0 }
p new_num

 

実行結果は以下の通りです。

実行結果

30

 

inject(reduce)

injectメソッド(エイリアスメソッドはreduce)は、ブロックに配列の「要素1、要素2」、「ブロックの前回の戻り値、要素3」、「ブロックの前回の戻り値、要素4」というように繰り返し処理を行い、メソッドの戻り値はブロックが最後に返した値になります。

 

例として、配列の合計を求めるプログラムは以下の通りです。

# 配列の要素の合計を求める
num = [10, 20, 30, 40, 50, 60]
new_num = num.inject { |sum, n| sum + n }
p new_num

 

実行結果は以下の通りです。

実行結果

210

 

また、初期値を設定した場合は、ブロックに配列の「初期値、要素1」、「ブロックの前回の戻り値、要素2」、「ブロックの前回の戻り値、要素3」と繰り返し処理を行います。

 

先ほどのプログラムに初期値を設定してみましょう。初期値に1を設定した場合は以下の通りです。

# 配列の要素の合計を求める
num = [10, 20, 30, 40, 50, 60]
new_num = num.inject(1) { |sum, n| sum + n }
p new_num

 

実行結果は以下の通りです。

実行結果

211

 

少々分かりずらいですが、この動きを理解して使いこなせると色々できそうな感じです。

尚、injectメソッドは数値以外のオブジェクトにも適用できるので覚えておきましょう。

 



&とシンボル

ブロックを使うメソッドは、以下の条件を満たした場合にかなり簡潔に書くことができます。

  1.  ブロック引数が1個
  2.  ブロック中で呼び出すメソッドに引数がない
  3.  ブロック中では、ブロック引数に対してメソッドを1回呼び出す以外の処理がない

 

例えば以下のプログラムがあったとします。

# 奇数の場合はtrue、偶数の場合はfalseを新しい配列に格納する場合
num = [1, 2, 3, 4, 5]
num_boolean = num.map { |n| n.odd? }
p num_boolean
実行結果
[true, false, true, false, true]

 

次のように書き換えることができます。

# 奇数の場合はtrue、偶数の場合はfalseを新しい配列に格納する場合
num = [1, 2, 3, 4, 5]
num_boolean = num.map(&:odd?)
p num_boolean
実行結果
[true, false, true, false, true]

 

このように、条件を満たせば「&:メソッド名」で簡潔に書けるので覚えておきましょう。

 

まとめ

  •  空の配列に他の配列の要素を詰め込むような処理はmapメソッドが使える
  •  selectメソッドは、各要素に対してブロックを評価し、その戻り値が真の要素を集めた配列を返す
  •  findメソッドは、ブロックの戻り値が真になった最初の要素を返す

 

今回紹介したメソッドは使用頻度が高いので、使い方をしっかり覚えましょう!

 

  • 関連記事

オススメのRuby入門サイトはどれ?Rubyの学習方法をまとめる

2017.10.24

 

The following two tabs change content below.
Tomoyuki

Tomoyuki

好きなことで生きたくて、SEを辞めてブロガー&ゲーム実況で活動中。パソコン、ネット、ゲームが大好き。YouTubeのチャンネル登録&Twitterのフォローもぜひお願いします!









好きなことで生きるために

自分の好きなことや、得意なことを仕事にして、
生きていく方法をこのブログで示します。



資産運用ならウェルスナビがおすすめ!

ウェルスナビなら誰でも簡単に自動で資産運用を始められますよ!
まだ資産運用を始めてない人は、ぜひ一度チェックしてみて下さいね。


コメントを残す

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