在ruby中使用sort_by后如何返回哈希?
当我对频率散列使用在ruby中使用sort_by后如何返回哈希?,ruby,arrays,hash,Ruby,Arrays,Hash,当我对频率散列使用sort\u by时,它返回一个数组。如何返回散列呢 puts frequency.class #returns hash frequency = frequency.sort_by {|k,v| v}.reverse puts frequency.class #returns array 只返回一个数组。您可以将其转换回如下哈希: frequency = frequency.sort_by {|k,v| v}.reverse frequency
sort\u by
时,它返回一个数组。如何返回散列呢
puts frequency.class #returns hash
frequency = frequency.sort_by {|k,v| v}.reverse
puts frequency.class #returns array
只返回一个数组。您可以将其转换回如下哈希:
frequency = frequency.sort_by {|k,v| v}.reverse
frequency = Hash[frequency]
这是一个非常古老的问题,但使用Ruby 2.2+非常简单:
frequency.sort_by { |_, v| -v }.to_h
我不认为我会称之为铸造,但是的,这是解决方案。这在1.9.3中对我不起作用。散列“顺序”(通过
每个
)改变,但它没有排序。@JimStewart在ruby 1.9.3
下,这种方法对我来说很好。例如,我尝试了以下代码:h={:fernando=>28,:john=>18,:peter=>54}
哈希[h.sort_by{name,age | age}.reverse]
这是正确的结果。请参见结尾处的.reverse
。它会给你按年龄排列的值,从大到小。对我来说,它在1.9.3和2.0.0中都有效@JimStewart,你说的是键,但asker似乎想按值排序。这也是弗门德斯的例子所做的:对年龄进行反向排序。