57173

[code]

    hash = {"1"=>"53.0", "3"=>"50.30", "5"=>"1.600", "7"=>"63.0", "9"=>"103.400"}
    
[/code]

上記のような場合にvalueの最大値103.400を検索し、そのkeyの"9"を出力したいのですが上手くいきません。

以下のようにvalueを文字列から数値にしてmaxを求めてその値を検索すればいいかと思いましたが上手くいかずnilが返ってきます。

[code]

    hash = {"1"=>"53.0", "3"=>"50.30", "5"=>"1.600", "7"=>"63.0", "9"=>"103.400"}
    p hash1 = hash.values.map(&:to_f)
    p a = hash1.max.to_s
    p hash.find{|k,v| v == a }
    
[/code]

小数点以下の0の表記が問題なのかなと思いますが、求め方自体が無理やり感があるような気がします。  
他にも何か求め方があれば教えて頂きたいです。


CC BY-SA 4.0
2019-08-05T02:00:58.570
57170
2019-08-05T02:23:54.197
29428
question
ruby
文字列で返されたハッシュ内の最大値を検索したい

[code]

    hash = {"1"=>"53.0", "3"=>"50.30", "5"=>"1.600", "7"=>"63.0", "9"=>"103.400"}
    p hash1 = hash.values.map(&:to_f)
    p a = hash1.max
    p hash.find{|k,v| v.to_f === a }
    
[/code]

そのコードで`["9", "103.400"]`が出力しています。keyが出力したいなら、以下のコードを使ってください。

[code]

    hash = {"1"=>"53.0", "3"=>"50.30", "5"=>"1.600", "7"=>"63.0", "9"=>"103.400"}
    p hash1 = hash.values.map(&:to_f)
    p a = hash1.max
    p result = hash.find{|k,v| v.to_f === a }
    p result[0]
    
[/code]


CC BY-SA 4.0
2019-08-05T02:23:18.033
57172
2019-08-05T02:23:18.033
29281
57170
answer


`to_f` → `to_s` することで、存在しない文字列 `"103.4"` (文字列としての `"103.400"` と `"103.4"`
は異なる) を探すことになってしまっていますね。

[code]

    hash.max_by {|k,v| v.to_f}
    
[/code]

で、値が最大であるキーとその値のペアが配列として返りますので、その1要素目が望みの値となります。


CC BY-SA 4.0
2019-08-05T02:23:54.197
57173
2019-08-05T02:23:54.197
17037
57170
answer