最简单的方法来确定List是否包含重复项?

Jus*_*s12 25 scala

一种方法是这样

list.distinct.size != list.size
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法?拥有一个containsDuplicates方法本来不错

tim*_*day 18

假设"更好"意味着"更快",请参阅此问题中基准测试的替代方法,这似乎显示了一些更快的方法(尽管注意,distinct使用HashSet并且已经是O(n)).YMMV当然,取决于具体的测试用例,scala版本等.可能与"distinct.size"方法相比,任何明显的改进都会在发现重复时立即提前,但加速的大小是多少.实际获得的内容在很大程度上取决于您的用例中实际的重复项.

如果你的意思是在"更好"你想写list.containsDuplicates的替代containsDuplicates(list),使用隐式:

implicit def enhanceWithContainsDuplicates[T](s:List[T]) = new {
  def containsDuplicates = (s.distinct.size != s.size)
}

assert(List(1,2,2,3).containsDuplicates)
assert(!List("a","b","c").containsDuplicates)
Run Code Online (Sandbox Code Playgroud)


par*_*tic 16

你也可以写:

list.toSet.size != list.size
Run Code Online (Sandbox Code Playgroud)

但结果将是相同的,因为distinct已经实现了Set.在这两种情况下,时间复杂度应为O(n):您必须遍历列表并且Set插入是O(1).