Сортировка Haskell неупорядоченного списка с использованием порядка прокси - PullRequest
8 голосов
/ 05 июля 2010

Предположим, у меня есть x :: [(n, a)], где n - это число, а a - неупорядоченный элемент (не принадлежит классу Ord).

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

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

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

Ответы [ 3 ]

12 голосов
/ 05 июля 2010

Тьфу. Не берите в голову. sortBy.

5 голосов
/ 05 июля 2010

Вы хотите

sortBy (compare `on` fst)

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

2 голосов
/ 06 июля 2010

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

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

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

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