質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

2418閲覧

hash のキーと値の積の和の求め方

manman

総合スコア233

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2017/10/08 12:44

ruby

1h = {2 => 3, 3 => 5, 5 => 11}

のとき値の和は
h.values.inject(:+)
でいいと思いますが、
キーと値の積の和(= 23 + 35 + 5*11)
はどのように求めればいいですか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

次の irb での操作をみてください。

ruby

1irb(main):009:0> h = {2 => 3, 3 => 5, 5 => 11} 2=> {2=>3, 3=>5, 5=>11} 3 4irb(main):010:0> h.values.inject(:+) 5=> 19 6 7irb(main):011:0> h.values.sum 8=> 19 9 10irb(main):012:0> h.map {|key, val| key * val } 11=> [6, 15, 55] 12 13irb(main):013:0> h.map {|key, val| key * val }.sum 14=> 76

map を使って、 key * value の配列を生成し、その 合計を求めてみました。

投稿2017/10/08 13:12

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

manman

2017/10/08 13:15

.sum は.inject(:+) と同じですか?
katoy

2017/10/08 15:08

参考情報: https://qiita.com/jnchito/items/9f9d45581816f121af07 > ... > Enumerableモジュールにsumが追加された > ... > ただし、sumメソッドでは内部的にカハンの加算アルゴリズムが使われているため、+演算子で加算したときよりも高速で誤差が少なくなりやすいです。 > ...
guest

0

2次元配列の操作になるので一度の操作で対応するのは難しいのではないかと思います。
掛けたものを足すということで下記のように考えました。

ruby

1h = {2 => 3, 3 => 5, 5 => 11} 2 3h.map{|a,b| a * b}.reduce(:+) 4# => 76 5 6h.inject(0){|a,b| a + b.inject(:*)} 7# => 76 8

投稿2017/10/08 13:09

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問