按值排序哈希值

时间:2016-07-18 16:19:52

标签: ruby sorting hash

我想按价值排序。我尝试按此way对我的哈希进行排序,但它不起作用,我不知道为什么。 这是我的代码:

test="neki text sa recima neki sa i jos neki aa"
mapa=Hash.new(0)
test.split(" ").each do |rec|
    mapa[rec]+=1
end

mapa.sort_by {|a,b| b}.reverse

mapa.each do |key, value|
    puts "#{key} #{value}" 
end

输出是:

neki 3
text 1
sa 2
recima 1
i 1
jos 1
aa 1

它对HASH没有任何作用:/ 有人可以向我解释为什么它不起作用?

如果你给我一个MINUS,请在评论中解释我做了什么值得它,所以我知道在哪里改进。 :)

1 个答案:

答案 0 :(得分:3)

Enumerable#sort_by从未承诺对可枚举的 inplace 进行排序。它返回结果:

puts mapa.sort_by {|a,b| -b}
#⇒ sorted

或者,以更惯用的方式:

mapa.sort_by(&:last).reverse.each do |k, v|
  puts ...
end

请注意,在检查irb中的输出时,顺序可能与散列中元素的实际顺序不对应,因为irb(安装了打印格式化程序)有自己的想法如何输出哈希值。