🍳

Ruby 基本の配列メソッド

2024/04/14に公開

基本の配列メソッドをまとめました。

each

配列の要素を最初から最後まで順番に取り出し、ブロック(do~end)内で記述された処理を行う。

numbers = [1, 2, 3, 4, 5]
sum = 0
 numbers.each do |n|
   sum += n
 end
 sum
=> 15
  • |n|のnはブロック引数と呼ばれ、eachメソッドから渡された配列の要素が順番に入る。
  • ブロック引数はnでなくてもよい。

do...endと{}

do...endの代わりに{}で囲んでブロックを作れる。

numbers = [1, 2, 3, 4, 5]
sum = 0
 numbers.each { |n| sum += n }
 sum
=> 15
  • 改行を含む長いブロックの場合はdo...end
  • 1行でシンプルコンパクトに書く場合は{}

map

各要素に対してブロック内の処理をして新しい配列にして返す。

numbers = [1, 2, 3, 4, 5]
new_numbers = numbers.map { |n| n * 3 }
=> [3, 6, 9, 12, 15]
  • ブロックの戻り値が配列の要素となる新しい配列が作成される。

select

各要素に対してブロック内を評価して、その戻り値が真の要素を集めた配列を返す。

numbers = [1, 2, 3, 4, 5, 6]
even_numbers = numbers.select {|n| n.even? }
=> [2, 4, 6]

reject

selectの反対で、戻り値が偽(真の値を除外)の要素を集めた配列を返す。

numbers = [1, 2, 3, 4, 5, 6]
even_numbers = numbers.reject {|n| n.even? }
=> [1, 3, 5]

inject

たたみ込み演算を行うメソッド。

numbers = [1, 2, 3, 4]
sum = numbers.inject(0) { |result, n| result + n }
=> 10

上記のうごき

  1. ブロックの第1引数のresultにinjectの引数である0が入る。
  2. ブロックの第2引数のnに配列の各要素(1、2、3、4)が順番に入る。
  3. result=0、n=1で、0+1=1。これが次のresultに入る。
  4. result=1、n=2で、1+2=3。これが次のresultに入る。
  5. result=3、n=3で、3+3=6。これが次のresultに入る。
  6. result=6、n=4で、6+4=10。最後の要素に達したのでinjectメソッドの戻り値になる。
  • 文字列など数値以外のオブジェクトにも適用可能。
["p", "p", "l", "e"].inject("a") { |result, s| result + s }
=> "apple"

参考文献

https://gihyo.jp/book/2021/978-4-297-12437-3

Discussion