从Erlang中的列表中删除重复的元素

Sin*_*ina 14 erlang list

如何从Erlang中的列表中删除副本?

假设我有一个列表,如:

[1,1,2,3,4,5,5,6]
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到:

[1,2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)

小智 37

你可以使用sets,例如:

my_nonDuplicate_list1() ->
    List = [1,1,2,3,4,5,5,6],
    Set = sets:from_list(List),
    sets:to_list(Set).
Run Code Online (Sandbox Code Playgroud)

这将返回[1,2,3,4,5],不再重复,但很可能没有排序.

没有使用的另一种可能性sets是:

my_nonDuplicate_list2() ->
    List = [1,1,2,3,4,5,5,6],
    lists:usort(List).
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它返回[1,2,3,4,5],不再重复和排序.


exp*_*boy 14

对于那些希望保留列表顺序的人:

remove_dups([])    -> [];
remove_dups([H|T]) -> [H | [X || X <- remove_dups(T), X /= H]].
Run Code Online (Sandbox Code Playgroud)

  • 这应该是一个可以接受的答案,要为列表使用`distinct`或`remove_dups`函数的要旨是保留顺序,否则总是使用集合或有序集合。 (2认同)