我有一个按值排序的哈希,但如果键的频率相同,我想按字典顺序打印键。
我的代码:
sorted_terms_list = new_array.sort_by {|key, val| val}.reverse
例如输入:
{'a': 1, 'abortion': 1, 'aaron': 1, 'aaa': 1, 'ab': 1, 'aa': 1}
预期产出:
a
aa
aaa
aaron
ab
abortion
答案 0 :(得分:3)
这是一种方式: -
hash = {'a' => 1, 'abortion' => 1, 'aaron' => 1, 'aaa' => 1, 'ab' => 1, 'aa' => 1}
puts hash.sort_by { |k,v| [v,k] }.map(&:first)
# >> a
# >> aa
# >> aaa
# >> aaron
# >> ab
# >> abortion
答案 1 :(得分:1)
您可以查看sort方法的返回值。
该块必须实现a和b之间的比较,并返回-1, 当a跟随b时,0表示a和b相等,如果b跟随a,则为+1。
http://www.ruby-doc.org/core-2.1.4/Array.html#method-i-sort
hash = {'ab' => 2, 'abortion' => 6, 'a' => 2}
hash.to_a.sort{|a, b| (b.last > a.last) ? 1 : (b.last < a.last ? -1 : (a.first <=> b.first)) }
#=> [["abortion", 6], ["a", 2], ["ab", 2]]
答案 2 :(得分:0)
只有hash.keys.sort
才能执行此操作。
hash = {'a' => 1, 'abortion' => 1, 'aaron' => 1, 'aaa' => 1, 'ab' => 1, 'aa' => 1}
sorted_terms_list = hash.keys.sort
puts sorted_terms_list
这将为您提供所需的输出
答案 3 :(得分:0)
puts new_array.sort_by(&:reverse).keys