LoginSignup
0
0

More than 3 years have passed since last update.

配列メソッドの使い方色々

Last updated at Posted at 2019-08-18

Rails歴の長い先輩方は配列メソッドの使い方がうまいなと日々思うので、基本的な使い方だけまとめてみました。

①&:(メソッドをブロックとして渡す)

# ex. 整数→文字列に変換

numbers = [1, 2, 3, 4, 5, 6]
numbers.map(&:to_s)

> ["1", "2", "3", "4", "5", "6"]

enumメソッドやRailsの組み込みメソッドでよく使います!

②ブロックの利用(ワンライナー)

numbers = [1, 2, 3, 4, 5, 6]
numbers.map { |n| n.to_s }

> ["1", "2", "3", "4", "5", "6"]

③ブロックの利用(do~end)

numbers = [1, 2, 3, 4, 5, 6]
numbers.map do |n|
  n.to_s
end

> ["1", "2", "3", "4", "5", "6"]

使い分け

僕は以下のように使い分けていました。

用途
A ①(&:) メソッド一つで処理がすむ
B ②({}) ①では対応できないが、ワンライナーでいけるくらいの長さ、または続けて配列処理したい場合
C ③(do~end) 処理が複雑

いくつか例にとってパターン分けしてみます!

(例1) 複数回にわけて、メソッド処理したい

numbers = [1, 2, 3, 4, 5, 6]
numbers.map(&:to_s).select { |n| n == '2' } 

> ["2"]

Bパターンですね!

(例2) ワンライナーではすまない複雑な処理

numbers = [1, 2, 3, 4, 5, 6]
even_num = [2, 4, 6]

numbers.each do |n|
  if even_num.include?(n)
    p '偶数'
  else
    p '奇数'
 end
end

> '奇数'
> '偶数'
> '奇数'
> '偶数'
> '奇数'
> '偶数'

Cパターンですね!

ワンライナーではすまない & 追加で配列加工したい

today = Date.today
two_months_later = today.next_month.next_month

mondays = (today..two_months_later).map { |date|
  if date.monday?
    "#{I18n.l(date)}の月曜日です"
  end
}.compact

> ["2019/08/19の月曜日です", "2019/08/26の月曜日です", "2019/09/02の月曜日です", "2019/09/09の月曜日です", "2019/09/16の月曜日です", "2019/09/23の月曜日です", "2019/09/30の月曜日です", "2019/10/07の月曜日です", "2019/10/14の月曜日です"]

Bパターンですね!(ワンライナーでかけそうでごめんなさい)

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0