回答
你可以使用sets
,例如:
my_nonDuplicate_list1() ->
List = [1,1,2,3,4,5,5,6],
Set = sets:from_list(List),
sets:to_list(Set).
这将返回[1, 2,3,4,5],没有更多的重复,但很可能没有排序。
而不sets
使用另一种可能性是:
my_nonDuplicate_list2() ->
List = [1,1,2,3,4,5,5,6],
lists:usort(List).
在这种情况下它返回[1,2,3,4,5],没有更多的重复和排序。
一个可能的解决方案,Preserve the order of the elements
以帮助你学习如何操纵名单,将涉及两个功能:
delete_all(Item, [Item | Rest_of_list]) -> delete_all(Item, Rest_of_list); delete_all(Item, [Another_item| Rest_of_list]) -> [Another_item | delete_all(Item, Rest_of_list)]; delete_all(_, []) -> []. remove_duplicates(List)-> removing(List,[]). removing([],This) -> lists:reverse(This); removing([A|Tail],Acc) -> removing(delete_all(A,Tail),[A|Acc]).
要进行测试,
Eshell V5.9 (abort with ^G) 1> mymod:remove_duplicates([1,2,3,1,2,4,1,2,1]). [1,2,3,4] 2>
而对于那些希望保留的顺序清单:
remove_dups([]) -> [];
remove_dups([H|T]) -> [H | [X || X <- remove_dups(T), X /= H]].
我会这样做,首先要保持秩序,虽然它是不建议。请记住,AddedStuff ++ Accumulator
是好的,但Accumulator ++ AddedStuff
真的很糟糕。
rm_dup(List) ->
lists:foldl(
fun(Elem, Acc) ->
case lists:member(Elem, Acc) of
true ->
Acc;
false ->
AcC++ [Elem]
end
end, [], List
).
该解决方案是更有效的,如果你想维持秩序:
rm_dup(List) ->
lists:reverse(lists:foldl(
fun(Elem, Acc) ->
case lists:member(Elem, Acc) of
true ->
Acc;
false ->
[Elem] ++ Acc
end
end, [], List
)).
模块sets
具有可组成并以有效的方式做的工作有两个功能:sets:from_list/1
返回一组与列表中的所有元素(没有重复定义的元素)和sets:to_list/1
返回一个包含集合元素的列表。下面是使用的例子:
4> sets:to_list(sets:from_list([1,1,2,3,4,5,5,6])).
[3,6,2,5,1,4]
我们可以定义功能
nub(L) -> sets:to_list(sets:from_list(L)).
请将解释添加到您的答案 –
我编辑了我的答案,我希望就够了。 – aherranz
我的意见,最好的选择是使用lists:usort()
但如果你不想要使用BIF,并且希望对列表进行排序,我建议使用快速排序的版本,在这个实现中,您将得到没有重复值的排序列表。
unique_sort([]) -> [];
unique_sort([Pivot|T]) ->
unique_sort ([X || X <- T, X < Pivot) ]++
[Pivot] ++
unique_sort ([X || X <- T, X > Pivot ]).
- 1. Erlang重复元素列表
- 2. 删除列表中的重复元素
- 3. 删除列表中的重复元素
- 4. Java 8 - 从列表中删除重复的元素序列
- 5. 从排序的链接列表中删除重复的元素
- 6. 从jSoup的元素列表中删除重复的URL?
- 7. 如何从Scheme的列表中删除非重复的元素?
- 8. 从列表中删除重复元素的最有效方法
- 9. 如何从numpy数组列表中删除重复的元素?
- 10. 如何从列表中删除重复的无序元素?
- 11. 从python列表中删除重复的元素
- 12. Erlang:从proplist中删除单个元素
- 13. 删除列举元素的重复
- 14. 删除重复元素的序列
- 15. 删除重复的元素
- 16. 删除重复的元素
- 17. 删除元素,并从列表中删除下列元素
- 18. 使用javascript从下拉列表中删除重复元素
- 19. 如何从序列中的列表中删除重复的元素?
- 20. 从python3的列表中删除元素
- 21. 从列表中删除重复的豆
- 22. 从元组列表中删除元素
- 23. 删除lisp中嵌套列表的重复元素
- 24. 删除python列表中的重复元素
- 25. 分组和删除列表中的重复元素蟒蛇
- 26. 删除链接列表中的重复元素
- 27. 删除列表中同一元素的重复出现
- 28. 删除排序列表中的重复元素
- 29. 删除BST中的重复元素
- 30. 删除ArrayList中的重复元素Java
输入表是否已排序? –
而且命令很重要吗?我可以重新排列元素吗? –