Сортировать коллекцию объектов по номеру (сначала по возрастанию), затем по буквам (по алфавиту)

Я строю виджет, чтобы показать количество медалей на Олимпиаде. У меня есть коллекция объектов "страна", где у каждого есть атрибут "имя", а "золото", "серебро", "бронза" для подсчета медалей.

Список должен быть отсортирован: 1. Сначала по общему количеству медалей 2. Если одинаковые медали, подразделяйте по типу (золото> серебро> бронза, т.е. два золота> 1 золото + 1 серебро) 3. Если одинаковые медали и тип, подпишите сортировать по алфавиту

Я делаю это в рубине, но я полагаю, что язык не имеет значения. Я нашел решение, но если кажется, что должен быть более элегантный способ сделать это.

Вот что я сделал:

Создайте виртуальный атрибут с итоговой взвешенной медалью. Таким образом, если бы у них было 2 золота и 1 серебро, взвешенный итог был бы «3.020100». 1 золото и 1 серебро и 1 бронза будут "3.010101"

Так как мы хотим отсортировать количество медалей по наибольшему первому, список сортируется DESC. Но затем мы хотим отсортировать по алфавиту (т.е. ASC) после этого. Таким образом, я создал функцию, которая будет альфа-инвертировать слово (т.е. "canada" => "xzmzwz")

Преобразуйте взвешенную сумму в строку, объедините обратное имя (т. Е. «3010101xzmzwz»), затем отсортируйте по убыванию. Вуаля.

К настоящему времени кто-то придумал, как сделать то же самое в двух строках кода. Хотите просветить меня?

Ответы на вопрос(3)

Ваш ответ на вопрос