Ruby の map reduce
世の中 map reduce 大流行。
Ruby では map は頻繁に使うけど reduce って使ったことない。
と思って調べたら reduce って inject のことか。なーんだ。
そう言えば map も collect って名前持ってたね。
Ruby 的な名前 | 一般的な名前 |
---|---|
collect |
map |
inject |
reduce |
rubyist には map 派と collect 派がいるらしいが、reduce 派というのは聞いたことないなぁ。
昔 matz さんが「Enumerable は -ect って名前のメソッドで揃えてある」って言ってたような気がする。*1
(0..9).to_a # => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # -ect (0..9).collect{|i|i*2} # => [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] (0..9).select{|i|i%2==0} # => [0, 2, 4, 6, 8] (0..9).reject{|i|i%2==0} # => [1, 3, 5, 7, 9] (0..9).inject{|s,i|s+=i} # => 45 (0..9).detect{|i|i*2>9} # => 5 # 同じメソッド (0..9).map{|i|i*2} # => [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] (0..9).find_all{|i|i%2==0} # => [0, 2, 4, 6, 8] # reject はない? (0..9).reduce{|s,i|s+=i} # => 45 (0..9).find{|i|i*2>9} # => 5