ruby sort_by дважды - PullRequest
       1

ruby sort_by дважды

11 голосов
/ 18 сентября 2009

В Ruby есть метод sort_by для Enumerables. Фантастика! Так что вы можете сделать что-то вроде

entries.sort_by { |l| l.project.name }

Это отсортировало бы кучу записей по именам их проектов. Как вы могли бы сделать так, чтобы в проектах с одинаковыми именами записи были отсортированы по времени?

Ответы [ 3 ]

24 голосов
/ 18 сентября 2009

Я бы предложил поместить столбец, по которому вы хотите отсортировать, в массив.

entries.sort_by { |l| [l.project.name, l.project.time] }

Это будет учитывать естественный порядок сортировки для каждого типа.

6 голосов
/ 18 сентября 2009

Вы можете использовать обычный метод сортировки, чтобы сделать это.

entries.sort do |a, b|
  comp = a.project.name <=> b.project.name
  comp.zero? ? (a.project.time <=> b.project.time) : comp
end
3 голосов
/ 18 сентября 2009

Вернуть массив:

entries.sort_by { |l| [ l.project.name, l.project.time] }

это работает, потому что оператор <=> для массивов выполняет лексическое сравнение по полям, что вы и ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...