Scala:有效地比较两个列表的内容,可能包括重复,忽略顺序,不使用排序

时间:2016-02-15 21:23:26

标签: scala sorting

在Scala中,如何有效地比较两个列表/ seq的内容,无论它们的顺序如何,没有排序(我不知道元素的类型是什么)?

列表/序列可能包含重复项。

我见过somewhat similar discussion,但有些答案不正确,或者需要排序。

1 个答案:

答案 0 :(得分:2)

你可以做到

list1.groupBy(identity) == list2.groupBy(identity)

它是O(n)。

如果创建临时列表是一个问题,您可以创建一个帮助方法,只获取每个项目的计数而不是所有出现的次数:

def counter[T](l: List[T]) = 
  l.foldLeft(Map[T,Int]() withDefaultValue 0){ (m,x) => 
    m + (x -> (1 + m(x)))
  }

counter(list1) == counter(list2)