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

标签 scala

一种方法是这样

list.distinct.size != list.size

有没有更好的办法?要是有一个 containsDuplicates 就好了方法

最佳答案

假设“更好”意味着“更快”,请参阅 this question 中基准的替代方法,这似乎显示了一些更快的方法(尽管请注意 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)

关于scala - 确定 List 是否包含重复项的最简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7691971/

相关文章:

scala - Scala 中的 MapView(<not computed>)

scala - 我可以使用 for-yield 语法返回 Scala 中的 Map 集合吗?

scala - HList#foldLeft() 返回什么?

scala - 为什么 Scala 不能将此匹配优化为开关?

xml - scala.xml.RuleTransformer 的复杂性真的呈指数级增长吗?

scala - Scala的Int部门

scala - Scala 中的处理和抛出异常

scala - 使用sbt编译spark项目时 Unresolved 依赖项问题

java - Boyer-Moore 或 Java 或 Scala 库中的类似库

scala - 在抽象构造函数中访问覆盖的 val 时出现 NullPointerException