根据散列数组

时间:2017-10-06 11:52:06

标签: ruby

我有以下数组:

[
  {: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值对它进行升序排序。

有没有直接的方法可以做到这一点?

3 个答案:

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