Ruby排序数组的条件相反

MxL*_*evs 8 ruby arrays sorting

可能重复:
在Ruby中按降序排序数组

我想根据某些条件对元素数组进行排序,但顺序相反.所以基本上无论它做了什么然后逆转.

所以例如我有一个字符串数组,我想通过减少字符串长度对它进行排序

a = ["test", "test2", "s"]
a.sort_by!{|str| str.length}.reverse!
Run Code Online (Sandbox Code Playgroud)

虽然这样做了......有没有办法指定条件,以便排序算法反过来做?

mu *_*ort 24

长度是一个数字,所以你可以简单地否定它来反转顺序:

a.sort_by! { |s| -s.length }
Run Code Online (Sandbox Code Playgroud)

如果您正在对不容易否定的事情进行排序,那么您可以使用sort!并手动反转比较.例如,通常你会这样做:

# shortest to longest
a.sort! { |a,b| a.length <=> b.length }
Run Code Online (Sandbox Code Playgroud)

但您可以交换订单以反转排序:

# longest to shortest
a.sort! { |a,b| b.length <=> a.length }
Run Code Online (Sandbox Code Playgroud)


Thi*_*ilo 6

@mu的答案太短很好,但只适用于数字.对于一般情况,您可以采用以下sort方法:

 irb> a = ["foo", "foobar", "test"]
  => ["foo", "foobar", "test"]
 irb> a.sort{|a,b| a.length <=> b.length}
 => ["foo", "test", "foobar"]
 irb> a.sort{|a,b| b.length <=> a.length}
 => ["foobar", "test", "foo"]
Run Code Online (Sandbox Code Playgroud)

  • `sort_by(&:length).reverse`将更具可读性和更快速度. (5认同)