45230


メソッドa,b,c,dがあり、  
'a'の結果が{"symbol"=>"A", "number"=>2.0}  
'b'の結果が{"symbol"=>"B", "number"=>0.3}  
'c'の結果が{"symbol"=>"C", "number"=>-0.5}  
'd'の結果が{"symbol"=>"D", "number"=>-1.7}  
と返ってきた場合"number"の最大値と最小値を求めて結果は"symbol"で表示したいと考えています。

a~dを配列でまとめ、maxを使用したら最大値ではないものが、minを使用したら最小値ではないものが返ってきてなかなかうまくいきません。  
また"number"の最大値・最小値を求め、結果はそれぞれのペアである"symbol"で表示したいと思っているのですが、やり方が全く思い浮かびません。  
なにかアドバイス頂けたらありがたいです。


CC BY-SA 4.0
2018-07-02T06:20:12.583
45229
2018-11-09T13:53:55.337
29120
question
ruby
最大値と最小値の求め方について


メソッドの`max`、`min`にはそれぞれブロックを渡せるのでそれを利用すると解決出来そうです。

<https://ref.xaio.jp/ruby/classes/enumerable/max>  
<https://ref.xaio.jp/ruby/classes/enumerable/min>

以下のコードで変数`max`、`min`にハッシュが入っているのであとはsymbolで出力出来るかと思います。  
Ruby2.5.0で確認しました。

[code]

    a = {"symbol"=>"A", "number"=>2.0}
    b = {"symbol"=>"B", "number"=>0.3}
    c = {"symbol"=>"C", "number"=>-0.5}
    d = {"symbol"=>"D", "number"=>-1.7}
    max = [a, b, c, d].max{|a, b| a["number"].to_f <=> b["number"].to_f}
    min = [a, b, c, d].min{|a, b| a["number"].to_f <=> b["number"].to_f}
    max["symbol"] # => "A"
    min["symbol"] # => "D"
    
[/code]


CC BY-SA 4.0
2018-07-02T06:31:18.027
45230
2018-07-02T11:27:07.390
2018-07-02T11:27:07.390
28772
28772
45229
answer

[code]

    a = {"symbol"=>"A", "number"=>2.0}
    b = {"symbol"=>"B", "number"=>0.3}
    c = {"symbol"=>"C", "number"=>-0.5}
    d = {"symbol"=>"D", "number"=>-1.7}
    
    sorted_list = [a, b, c, d].sort_by{|n| n["number"]}
    [sorted_list.first, sorted_list.last].map{|h| h.values}
    
[/code]


CC BY-SA 4.0
2018-11-09T13:53:55.337
50134
2018-11-09T13:53:55.337
30913
45229
answer