sessanの日記

主に開発技術関連でお勉強したことをまとめていくサイトです。

Rubyのinjectの使い方

作業をしていて、初めて見て驚いたのでメモ。

例えば、1から10の平均値を求める場合、普通に考えると以下のようなコードを書くと思います。

def average1to10
  average = 0.0

  (1..10).each do |num|
    average += num.to_f / 10
  end

  return average
end

これをinjectを使って書くと、以下のように多少省略してかけます。average = 0.0の部分をinjectに渡して、eachブロックのブロック変数の一つ目averageにそれが保持されています。

def average1to10
  (1..10).inject(0.0) do |average, num|
    average += num.to_f / 10
  end
end


参考:ruby の inject をわかりやすく説明してみる - Moderation is a fatal thing. Nothing succeeds like excess.