一种方法是这样
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).
| 归档时间: |
|
| 查看次数: |
14315 次 |
| 最近记录: |