Чтобы удалить дубликаты из списка в OCaml, вы можете использовать несколько методов. Вот некоторые из них:
- Использование List.sort и List.fold_left: вы можете отсортировать список, а затем использовать
List.fold_left
для перебора отсортированного списка, удаляя последовательные повторяющиеся элементы. - Использование List.sort и List.fold_left: вы можете отсортировать список, а затем использовать
List.fold_left
для перебора отсортированного списка, удаляя последовательные повторяющиеся элементы. - /ol>
let delete_duplicates lst = let sorted_lst = List.sort compare lst in let rec aux acc = function | [] -> List.rev acc | [x] -> List.rev (x :: acc) | x :: (y :: _ as tl) -> if x = y then aux acc tl else aux (x :: acc) tl in aux [] sorted_lst
- Использование хеш-таблицы: вы можете перебирать список и использовать хеш-таблицу для отслеживания элементов, обнаруженных на данный момент. Если элемент уже присутствует в хеш-таблице, его можно пропустить; в противном случае добавьте его к результату.
let delete_duplicates lst = let table = Hashtbl.create (List.length lst) in let rec aux acc = function | [] -> List.rev acc | x :: tl -> if Hashtbl.mem table x then aux acc tl else (Hashtbl.add table x (); aux (x :: acc) tl) in aux [] lst
Эти методы удалят повторяющиеся элементы из списка, сохраняя при этом порядок остальных элементов.