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