检查两个列表是否包含相同的元素

Ser*_*nik 5 erlang equality list

我有两个函数返回相同大小的结果列表,我试图检查结果是否相同.列表中的顺序可以不同.我目前正在使用以下功能:

lists_are_the_same(List1, List2) ->
    List1 -- List2 =:= [].
Run Code Online (Sandbox Code Playgroud)

此函数从另一个列表中减去一个列表,并检查结果是否为空列表.问题是,这种方法非常慢,在我的情况下,列表可能相当大.

有没有更快的方法来检查两个列表是否由完全相同的元素组成?

Ham*_*ani 6

更快捷的方法是对每个列表进行排序,然后按如下方式对它们进

lists_are_the_same(List1, List2) ->
    lists:sort(List1) =:= lists:sort(List2).
Run Code Online (Sandbox Code Playgroud)

根据Steve的评论,重要的是要知道Erlang中的所有值都是可排序的并且已经定义了顺序,因此它适用于所有可能的列表元素.

  • 在Erlang中,所有值都是可排序的,因为类型具有[已定义的总顺序](http://erlang.org/doc/reference_manual/expressions.html#id81064). (8认同)