Обработка списков

list haskell

69 просмотра

1 ответ

60 Репутация автора

Я пытаюсь выяснить, как обрабатывать список следующим образом:

[ [[4,6,7], [1,2,4,6]] , [[10,4,2,4], [1]] ]

Это список из списка целых чисел

Я хочу, чтобы моя функция принимала этот список в качестве входных данных и возвращала список целых чисел, которые есть в списке без дубликатов. Результат должен быть [4,6,7,1,2,10]. Но мне трудно понять, как пройти через это.

Моя первая идея состояла в том, чтобы обработать каждый список целочисленных списков отдельно, например: 1st = [[4,6,7], [1,2,4,6]] 2nd = [[10,4,2,4], [1]] функция main будет вызывать другую функцию для их рекурсивной обработки, но как функция запомнит, что было в окончательном списке, когда дело доходит до обработки 2-го списка? Я не думаю, что аккумулятор будет даже работать.

Автор: karambit Источник Размещён: 31.01.2016 06:16

Ответы (1)


8 плюса

60940 Репутация автора

Решение

Тип этого списка таков, (Num a) => [[[a]]]что вы можете просто использовать его concatдля выравнивания структуры, а затем nubдля удаления дубликатов:

nub . concat . concat $ [[[4,6,7], [1,2,4,6]], [[10,4,2,4], [1]]]
-- [4,6,7,1,2,10]

Live demo

В зависимости от того, как данные на самом деле структурированы и основаны на статистических соображениях, может быть более эффективно удалять дубликаты во внутренних списках перед объединением.

Автор: Shoe Размещён: 31.01.2016 06:38
Вопросы из категории :
32x32