Я пытаюсь добраться из штата до штата. Есть ли удобная функция Haskell для удаления дубликатов кортежей из списка? Или, может быть, это нечто более сложное, например, повторение всего списка?Haskell: Удаление дубликатов кортежей из списка?
Before: the list of tuples, sorted by word, as in
[(2,"a"), (1,"a"), (1,"b"), (1,"b"), (1,"c"), (2,"dd")]
After: the list of sorted tuples with exact duplicates removed, as in
[(2,"a"), (1,"a"), (1,"b"), (1,"c"), (2,"dd")]
удалить дубликаты из * отсортированных * списков в * O (n) * время с 'map head. group'. –
, если вы разрешаете '... (1," b "), (2," b "), (1," b "), ...' тогда нам нужно будет использовать '' map (head. nub). groupBy ((==) 'on' snd)' '. Предположительно, самая длинная группа по-прежнему будет короткой, поэтому 'nub' не будет такой проблемой. Если нет, всегда есть 'Set' или' HashMap'. Тем не менее, сначала разбивая его на группы, в * O (n) *, не может повредить. - Еще одна возможность заключается в повторной сортировке лексикографически (с [стабильной сортировкой] (http://hackage.haskell.org/package/base-4.8.2.0/docs/Data-List.html#v:sort)) 'snd' major и' fst' minor, который должен быть почти линейным; а затем поместите его через «карту». group'. –