2017-07-17 92 views
0

说,我这有类似元件哈希:下降哈希值排序

###EVNT-66 => 8.40, 
###EVNT-108 => 9.11, 
###EVNT-345 => 88.22, 
###EVNT-143 => 1.26 

我想他们降序基于哈希值进行排序。所以,我写了这个:

h.sort_by {|_key, value| value}.reverse 

令人惊讶的是,我得到了这种方式的结果:

###EVNT-108 => 9.11, 
###EVNT-66 => 88.22, 
###EVNT-345 => 8.40, 
###EVNT-143 => 1.26 

这是不对的。与'88'在它应该在顶部。我不知道我还能写什么来实现这一目标。

+2

的值是字符串。如果要按数字顺序对它们进行排序而不是按字典顺序排列,请在排序之前或排序期间将它们转换为某种数字类型。 – Ryan

+0

@Ryan,感谢您的快速回复。那么,我应该如何将字符串转换为数字? –

+0

这取决于。你的号码有什么样的精度?两位小数位,总是在0-100之间,或者......? – Ryan

回答

3

它似乎排序按字母顺序。先转换为数字。

h.sort_by {|_key, value| -value.to_f} 

减号可避免使用reverse

+0

工作就像魅力!谢谢。 '.to_f'是我所需要的。 –