Сортировка Haskell неупорядочиваемого списка с помощью порядка прокси

Предположим, что я имею x :: [(n, a)] где n является числом, и неупорядочиваемого объекта (не имеет класса Порядок).

Я хочу отсортировать этот список по n.

Я не могу сделать sort x потому что a не упорядочиваемо. Я могу заменить a индексами и затем собирают новое использование списка !! но это походит на плохое решение.

Альтернативы?

8
задан qrest 5 July 2010 в 06:32
поделиться

3 ответа

Уф. Неважно. sortBy .

12
ответ дан 5 December 2019 в 08:50
поделиться

Вы хотите

sortBy (compare `on` fst)

или что-то подобное. Вы найдете в , определенном в модуле Data.Function , и sortBy в Data.List , которые вам нужно будет импортировать .

5
ответ дан 5 December 2019 в 08:50
поделиться

Кроме того, если у вас есть альтернативная функция (например, вызовите ее f ) для формирования заказа, вы можете использовать свойства Data.Monoid для Ordering:

sortBy (comparing fst `mappend` comparing (f . snd))

, который будет использовать вашу функцию для второго компонента пары. Если вам не нужен второй критерий для сортировки пар или нет, то sortBy (сравнение fst) подойдет (в результирующем списке будут только пары с одним и тем же первым компонентом в списке). порядок).

2
ответ дан 5 December 2019 в 08:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: