Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ruby中使用sort_by后如何返回哈希?_Ruby_Arrays_Hash - Fatal编程技术网

在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似乎想按值排序。这也是弗门德斯的例子所做的:对年龄进行反向排序。