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

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

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

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

Q&A

解決済

2回答

976閲覧

ruby 配列内のハッシュの2つめのキーの最大値を求める

kzd847686

総合スコア53

Ruby

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

0グッド

0クリップ

投稿2019/01/07 13:45

初歩的な質問で申し訳ありません。
配列内のハッシュの2つめのキーの最大値を求めたいです。

 

pricelist = [ {"price"=>400009.0, "size"=>0.02}, {"price"=>400007.0, "size"=>0.07}, {
"price"=>400005.0, "size"=>0.2}, {"price"=>400004.0, "size"=>0.02}, {"price"=>400001.0, "size"=>2.15}, {"price"=>400000.0, "size"=>53.917}, {"price"=>399999.0, "size"=>0.2}, {"
price"=>399922.0, "size"=>0.11}]

上記のような配列内にハッシュがあり、それぞれ{"price"=>XXXXX, "size"=>ZZZZZZ}といった形で表示されています。この配列のハッシュのsizeが最も大きいハッシュのpriceを求めるのにはどうしたら良いでしょうか?

この例でいうと、{"price"=>400000.0, "size"=>53.917}が最も大きいsizeを持つので、400000.0を表示させるような処理を書きたいです。

次のようなコードでいけると思いましたが無理でした・・

ruby

1p pricelist.max{|a,b|a[1]["size"] <=> b[1]["size"]}

宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

[1]というのが意味不明です。

Ruby

1p pricelist.max{|a,b|a["size"] <=> b["size"]}

ですね。
普通は、こうです。

Ruby

1p pricelist.max_by{|a|a["size"]}

投稿2019/01/07 13:53

otn

総合スコア84557

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

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

kzd847686

2019/01/07 14:07

早速ありがとうございます。無事にできました!
guest

0

size が同じものが複数あった場合にも対応してみました。

size.py

python3

1pricelist = [ 2 {"price"=>400009.0, "size"=>0.02}, {"price"=>400007.0, "size"=>0.07}, 3 {"price"=>400005.0, "size"=>0.2}, {"price"=>400004.0, "size"=>0.02}, 4 {"price"=>400001.0, "size"=>2.15}, {"price"=>400000.0, "size"=>53.917}, 5 {"price"=>399999.0, "size"=>0.2}, {"price"=>399922.0, "size"=>0.11} 6] 7p pricelist.group_by{|x| x["size"]}.max 8p pricelist.group_by{|x| x["size"]}.max[1].map{|x| x["price"]}.sort.reverse 9puts 10 11pricelist = [ 12 {"price"=>400009.0, "size"=>0.02}, {"price"=>400007.0, "size"=>0.07}, 13 {"price"=>400005.0, "size"=>0.2}, {"price"=>400004.0, "size"=>0.02}, 14 {"price"=>400001.0, "size"=>2.15}, {"price"=>400000.0, "size"=>53.917}, 15 {"price"=>399999.0, "size"=>0.2}, {"price"=>399922.0, "size"=>0.11}, 16 {"price"=>600000.0, "size"=>53.917}, {"price"=>100000.0, "size"=>53.917} 17] 18p pricelist.group_by{|x| x["size"]}.max 19p pricelist.group_by{|x| x["size"]}.max[1].map{|x| x["price"]}.sort.reverse

実行例
イメージ説明

投稿2019/01/07 15:14

katoy

総合スコア22324

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問