hello-world
webエンジニアのメモ。とりあえずやってみる。

[ruby]injectを使って配列の合計値を求める

公開日時

rubyで配列の合計値を求める際にinjectを使うと便利だったのでメモ 以下のようなHashがあった場合に、値の合計値を求めたくなりました。

targets = {
 a: 10,
 b: 40,
 c: 50,
}

まずシンプルに以下のような形を思いつきます。

# sample1
sum1 = 0
targets.values.each do |val|
  sum1 = sum1 +  val
end
p sum1 #=> 100

これでとりあえずは合計が出ます。

ですがEnumerableクラスのinjectメソッドを使うともっと手軽に書くことができます。

# sample2
sum2 = targets.values.inject(0) { |sum, i| sum + i }
p sum2 #=> 100

inject(0)の0がsample1でいうsum1=0の部分に該当します。

sum + iの部分は同じですね。

これをさらに短く書くと以下のようにも書けるそうです。

# sample3
sum3 = targets.values.inject(:+)
p sum3

というわけで配列の合計値を求める場合はarray.inject(:+)の形式を使っていこうと思いました。

参考


Related #Ruby

[Rails]find_or_create_byとfind_or_initialize_by

Rails4で確認。

capistranoで世代管理する際の注意点

最近、デプロイツールに capistranoを使っているのですが、世代管理の設定を勘違いしていたのでメモを残しておきます。

[rails]unicornでpryを使う

先日、pryでデバッグする という記事を書きましたが、こちらはrails server(フォアグランド)でアプリを立ち上げた際のデバッグ方法でした。