Массив сортировки Ruby при условии в обратном порядке [дубликат]
Возможные Дубликаты:
сортировка массива в порядке убывания в Ruby
Я хочу, чтобы отсортировать массив элементов на основе некоторого условия, только в обратном порядке. Так что, в основном, что бы он ни сделал, а затем поменял местами.
например, у меня есть массив строк, и я хочу отсортировать его, уменьшив длину строки
a = ["test", "test2", "s"]
a.sort_by!{|str| str.length}.reverse!
пока это делает работу...есть ли способ указать состояние такое, что алгоритм сортировки будет делать это в обратном направлении?
2 ответов
длина-это число, поэтому вы можете просто отрицать его, чтобы изменить порядок:
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"]