ruby-on-rails 如何按值降序排列散列并以ruby输出散列?

neekobn8  于 2022-11-19  发布在  Ruby
关注(0)|答案(3)|浏览(116)
output.sort_by {|k, v| v}.reverse

和形成键

h = {"a"=>1, "c"=>3, "b"=>2, "d"=>4}
=> {"a"=>1, "c"=>3, "b"=>2, "d"=>4}

Hash[h.sort]

现在我有了这两个。但是我试着按值降序排序哈希,这样它会返回

=> {"d"=>4, "c"=>3, "b"=>2, "a"=>1 }

先谢谢你。
编辑:让我张贴整个代码。

def count_words(str)
  output = Hash.new(0)
  sentence = str.gsub(/,/, "").gsub(/'/,"").gsub(/-/, "").downcase
  words = sentence.split()
  words.each do |item|
    output[item] += 1 
  end
  puts Hash[output.sort_by{ |_, v| -v }]
  return Hash[output.sort_by{|k, v| v}.reverse]
end
h7wcgrx3

h7wcgrx31#

请尝试:

Hash[h.sort.reverse]

这应该会传回您想要的结果。

编辑:

要按值执行此操作,请执行以下操作:

Hash[h.sort_by{|k, v| v}.reverse]
gdx19jrr

gdx19jrr2#

试试看:

Hash[h.sort_by{ |_, v| -v }]
nhaq1z21

nhaq1z213#

老问题,但这里有2个其他解决方案,这是接近,但发现它更明显时,阅读:

h = {"a"=>1, "c"=>3, "b"=>2, "d"=>4}

hash.sort_by(&:last).reverse # => [["d", 4], ["c", 3], ["b", 2], ["a", 1]]

hash.sort { |a,b| b.last <=> a.last }

如果确实需要哈希值而不是数组的数组,请调用_h:

hash.sort_by(&:last).reverse.to_h # => {"d"=>4, "c"=>3, "b"=>2, "a"=>1}

hash.sort { |a,b| b.last <=> a.last }.to_h

相关问题