可能重复:
在 Ruby 中按降序对数组进行排序
我想根据某些条件对元素数组进行排序,但以相反的顺序除外。所以基本上不管它会做什么然后逆转。
例如,我有一个字符串数组,我想通过减少字符串长度对其进行排序
a = ["test", "test2", "s"]
a.sort_by!{|str| str.length}.reverse!
虽然这可以完成工作......有没有办法指定条件,以便排序算法将反向执行?
可能重复:
在 Ruby 中按降序对数组进行排序
我想根据某些条件对元素数组进行排序,但以相反的顺序除外。所以基本上不管它会做什么然后逆转。
例如,我有一个字符串数组,我想通过减少字符串长度对其进行排序
a = ["test", "test2", "s"]
a.sort_by!{|str| str.length}.reverse!
虽然这可以完成工作......有没有办法指定条件,以便排序算法将反向执行?
长度是一个数字,所以你可以简单地否定它来颠倒顺序:
a.sort_by! { |s| -s.length }
如果您要对不容易否定的东西进行排序,那么您可以使用sort!
并手动反转比较。例如,通常你会这样做:
# shortest to longest
a.sort! { |a,b| a.length <=> b.length }
但您可以交换顺序以反转排序:
# longest to shortest
a.sort! { |a,b| b.length <=> a.length }
@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"]