【发布时间】:2022-04-02 03:04:48
【问题描述】:
在学习 Ocaml 时,我看到了一个从列表中删除重复元素的代码。
let rec remove =
function
| [] -> []
| x::[] -> x::[]
| x::y::tl ->
if x=y then remove (y::tl)
else x::remove (y::tl)
但是,我发现这段代码只会删除连续的重复项,所以如果我尝试一些重复项,它们会单独占据一个位置,例如 [6;6;8;9;4;2;5;1;5;2; 3],代码处理连续重复的6,但不处理分离的2或5。
我怎样才能完全使列表只有独特的元素? 比如删除 [6;6;8;9;4;2;5;1;5;2;3] -> [6;8;9;4;2;5;1;3]。
附言我设法删除了先出现的重复项,但不知道如何删除后面出现的重复项。
【问题讨论】:
-
先排序就好了。然后所有重复项将彼此相邻。
-
排序可以是一个关键,但我现在想要的是在不改变任何元素顺序的情况下删除。无论如何,排序是个好主意
-
对,那么您必须跟踪到目前为止遇到的每个元素,并检查每个后续元素。
标签: list duplicates ocaml