如何按值按降序对哈希进行排序并在 ruby​​ 中输出哈希?

Posted

技术标签:

【中文标题】如何按值按降序对哈希进行排序并在 ruby​​ 中输出哈希?【英文标题】:How to sort a hash by value in descending order and output a hash in ruby? 【发布时间】:2012-10-24 08:14:37 【问题描述】:
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

【问题讨论】:

记住哈希在 Ruby 1.9 之前没有顺序 【参考方案1】:

试试:

Hash[h.sort.reverse]

这应该返回你想要的。

编辑:

按价值来做:

Hash[h.sort_by|k, v| v.reverse]

【讨论】:

但是排序的关键思想,我正在尝试对值进行排序 hmmm....我也认为是这样。我怎么会看到 unless1sunday1or1on2of2due1the5is1day2saturday1rent1falls1first2month2a1.. 所有键和值都粘在 irb 中。 它对我来说非常好。您使用的不是这个测试哈希吗? 不...好吧,如果这是对其进行排序的方式。那么它可能会导致它输出错误的哈希值。我会仔细检查。还是谢谢。 “我怎么会看到除非1sunday1or1on2of2due1the5is1day2saturday1rent1falls1first2month2a1”,你用的是什么版本的Ruby?【参考方案2】:

试试这个:

Hash[h.sort_by |_, v| -v ]

【讨论】:

以上是关于如何按值按降序对哈希进行排序并在 ruby​​ 中输出哈希?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Ruby中按降序对数组进行排序

如何根据特定值按降序对数组进行排序[重复]

使用 plotly-express 按值按降序排列条形图中的条形

根据值按降序对 Map<Key,Value> 进行排序 [重复]

Firebase 按降序对数据进行排序。 (只排序了一半。)

如何按降序对列表视图项进行排序