在Scala中,如何有效地比较两个列表/ seq的内容,无论它们的顺序如何,没有排序(我不知道元素的类型是什么)?
列表/序列可能包含重复项。
我见过somewhat similar discussion,但有些答案不正确,或者需要排序。
答案 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)