Quantcast
Channel: ループタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 92

rubyのブロック処理における配列関連のメソッドメモ

$
0
0

チェリー本を参考にした。このあたりよく忘れるのでメモっておく

each

普通のfor文と同じ役割

num = [1,2,3,4]
sum = 0
num.each do |n|
  sum += n
end
print sum #=> 10

each_with_index

eachについて配列のインデックスも扱うことができる

num = [1,2,3,4]
num.each_with_index do |i,n|
  p "#{i}:#{n}"
end
#出力は以下の通り
#0:1
#1:2
#2:3
#3:4

map

ある配列の要素に対する処理結果を別配列に返す

num = [1,2,3,4]
new_num = []
new_num = num.map do |n|
  n * 10
end
print new_num #=> [10,20,30,40]

エイリアスメソッドであるcollectも同様の使い方が可能

select/find_all

ある配列の要素について、条件に一致しているものを返す

num = [1,2,3,4]
new_num = num.select do |n|
  n.odd? #nが奇数のものをnew_numへ格納
end
print new_num  #=> [1,3]

エイリアスメソッドであるfind_allも同様の使い方が可能

reject

ある配列の要素について、条件に一致していないものを返す
要するにselect/find_allの反対

num = [1,2,3,4]
new_num = num.select do |n|
  n.odd? #nが奇数でないものをnew_numへ格納
end
print new_num  #=> [2,4]

find/detect

ある配列について、戻り値が真かつ最初の要素を返す

num = [1,2,3,4]
new_num = num.find do |n|
  n.odd?
end
print new_num #=> 3

エイリアスメソッドであるdetectも同様の使い方が可能

inject/reduce

ある値を初期値として配列各要素を足しこむ。eachの拡張か。

num = [1,2,3,4]
sum = num.inject(0) do |result,n|
  result += n #初期値0に各要素をすべて足しこむ。初期値が異なれば結果も異なる。
end
print sum #=> 10

当然ながら文字列の結合処理にも利用可能
エイリアスメソッドであるreduceも同様の使い方が可能

その他

map/collectとinject/reduceの思想の違いらしい。エイリアスというくらいなので多分map処理を名前変えてcollectとかしてんだろうな。要するに実装上の違いはないと思うがどうなのか。。。
https://magazine.rubyist.net/articles/0038/0038-MapAndCollect.html#map-%E3%81%A8-collect-%E3%81%AE%E7%99%BA%E6%83%B3%E3%81%AE%E9%81%95%E3%81%84


Viewing all articles
Browse latest Browse all 92

Trending Articles