我想按价值排序。我尝试按此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,请在评论中解释我做了什么值得它,所以我知道在哪里改进。 :)
答案 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
(安装了打印格式化程序)有自己的想法如何输出哈希值。