У меня есть Array
of Array
s, который я хочу отсортировать по длине до кратчайшего. Я достиг этого достаточно легко с sort_by
Сортировка массива массивов по длине с тай-брейком
> a = [ [1, 2, 9],
[4, 5, 6, 7],
[1, 2, 3] ]
> a.sort_by(&:length).reverse # or a.sort_by {|e| e.length}.reverse
=> [[4, 5, 6, 7], [1, 2, 3], [1, 2, 9]]
То, что я хочу, однако, иметь своего рода тай-брейка для списков одинаковой длины. Если длина двух списков одинакова, список, чья последняя запись больше, должна начинаться с. Таким образом, в приведенном выше случае следует переключать [1, 2, 9]
и [1, 2, 3]
.
Мне все равно, когда два списка имеют равную длину и равны последнему элементу, они могут быть в любом порядке, если это произойдет. Я не знаю, как и как я могу добиться этого с помощью рубиновой встроенной сортировки.
Используйте блок, как в примере, в документации: http://www.ruby-doc.org/core-2.0/Enumerable.html#method-i-sort_by – SheetJS