我有以下数组:
[
{:string=>"2:aa/", :count=>2, :char=>"a"},
{:string=>"2:dd/", :count=>2, :char=>"d"},
{:string=>"2:ee/", :count=>2, :char=>"e"},
{:string=>"=:gg/", :count=>2, :char=>"g"},
{:string=>"1:ii/", :count=>2, :char=>"i"},
{:string=>"=:nnn/", :count=>3, :char=>"n"},
{:string=>"1:ooo/", :count=>3, :char=>"o"},
{:string=>"2:sss/", :count=>3, :char=>"s"},
{:string=>"1:uuu/", :count=>3, :char=>"u"}
]
我希望这个哈希数组按count递减排序,如果count相等,那么我需要根据char值对它进行升序排序。
有没有直接的方法可以做到这一点?
答案 0 :(得分:6)
您可以将sort
与两个数组一起使用,并根据需要切换元素,而不是通过zookeeper-2.zookeeper-headless
否定值。
要排序升序/升序,您可以使用:(请参阅Array#<=>
)
nslookup
要对降序/升序进行排序,请切换第一个元素:
-
排序升序/降序,你切换第二个元素:(你明白了)
ary.sort { |a, b| [a[:count], a[:char]] <=> [b[:count], b[:char]] }
答案 1 :(得分:5)
试试这个
a.sort_by { |item| [-item[:count], item[:char]] }
a
是您的数组
答案 2 :(得分:1)
你问了一个直接的方法,所以这里有一种方法可以删除另一个间接 - 你的中间数据结构。这假设您的哈希只是达到目的的一种手段,并且您打算对字符串进行排序:
strings = ["2:aa/", "2:dd/", "2:ee/", "=:gg/", "1:ii/", "=:nnn/", "1:ooo/", "2:sss/", "1:uuu/"]
strings.sort_by{ |s| x = s[/\w+/]; [-x.size, x] }
正则表达式将您需要计算和排序的部分隔离开来;如果您的实际数据与示例不同,则可能需要进行调整。
(我会根据字母代表的内容用更有意义的变量名替换x