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入門サイトおすすめ3選!初心者向けの学習方法を解説

2017年10月24日

 

The following two tabs change content below.

Tomoyuki

SEを5年経験後、全くの未経験ながら思い切ってブロガーに転身し、月間13万PVを達成。その後コロナの影響も受け、以前から興味があったWeb系エンジニアへのキャリアチェンジを決意。現在はWeb系エンジニアとして働きながら、プロゲーマーとしても活躍できるように活動中。








シェアはこちらから


【2024年】おすすめのゲーミングPC

モンハンワイルズの発売日とPC版(Steam版)の推薦スペックが公開されたので、おすすめのゲーミングPCをご紹介!


コメントを残す

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