文字列で返されたハッシュ内の最大値を検索したい

投稿者: Anonymous
hash = {"1"=>"53.0", "3"=>"50.30", "5"=>"1.600", "7"=>"63.0", "9"=>"103.400"}

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

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

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 }

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

解決

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

hash.max_by {|k,v| v.to_f}

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

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *