ruby按长度排序数组然后按字母顺序排列

时间:2016-04-19 13:04:58

标签: arrays ruby sorting

我正在尝试将字符串转换为首先按降序长度排序的数组,然后按类似长度的字符串中的字母顺序降序排序。也就是说,“x ya yz z”应返回[“yz”,“ya”,“z”,“x”]。我看到在python中提出了一个类似的问题。红宝石会是什么样的?

我理解字符串可以按

的降序排序
string = 'Joe John Bill Juan Bill'

x = string.split.sort_by(&:length).reverse.uniq

3 个答案:

答案 0 :(得分:4)

这应该有效:

string.split.sort_by { |e| -e.length }.group_by(&:length).map{ |_, v| v.sort.reverse }.flatten

答案 1 :(得分:3)

只需使用Array#sort的大小和字符串本身就像这样:

array = 'Joe John Bill Juan Bill'
array.split(' ').sort { |a, b| [b.size, b] <=> [a.size, a] }
#=> ["Juan", "John", "Bill", "Bill", "Joe"]

答案 2 :(得分:1)

"x ya yz z".split.sort_by{|s| [s.length, s]}.reverse
# => ["yz", "ya", "z", "x"]