按键和值排序,Ruby

时间:2014-11-09 18:20:09

标签: ruby

我有一个按值排序的哈希,但如果键的频率相同,我想按字典顺序打印键。

我的代码:

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

4 个答案:

答案 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