Предположим, что я имею x :: [(n, a)]
где n является числом, и неупорядочиваемого объекта (не имеет класса Порядок).
Я хочу отсортировать этот список по n.
Я не могу сделать sort x
потому что a
не упорядочиваемо. Я могу заменить a
индексами и затем собирают новое использование списка !!
но это походит на плохое решение.
Альтернативы?
Вы хотите
sortBy (compare `on` fst)
или что-то подобное.
Вы найдете в
, определенном в модуле Data.Function
, и sortBy
в Data.List
, которые вам нужно будет импортировать .
Кроме того, если у вас есть альтернативная функция (например, вызовите ее f
) для формирования заказа, вы можете использовать свойства Data.Monoid для Ordering:
sortBy (comparing fst `mappend` comparing (f . snd))
, который будет использовать вашу функцию для второго компонента пары. Если вам не нужен второй критерий для сортировки пар или нет, то sortBy (сравнение fst)
подойдет (в результирующем списке будут только пары с одним и тем же первым компонентом в списке). порядок).