如何在列表中找到重复项?
发布时间:2020-12-16 09:36:09 所属栏目:安全 来源:网络整理
导读:我有一个未排序的整数的列表,我想找到那些有重复的元素。 val dup = List(1,1,2,3,4,5,6,100,101,102) 我可以用dup.distinct找到集合的不同元素,所以我写下我的答案。 val dup = List(1,102)val distinct = dup.distinctval elementsWithCounts = distinct
我有一个未排序的整数的列表,我想找到那些有重复的元素。
val dup = List(1,1,2,3,4,5,6,100,101,102) 我可以用dup.distinct找到集合的不同元素,所以我写下我的答案。 val dup = List(1,102) val distinct = dup.distinct val elementsWithCounts = distinct.map( (a:Int) => (a,dup.count( (b:Int) => a == b )) ) val duplicatesRemoved = elementsWithCounts.filter( (pair: Pair[Int,Int]) => { pair._2 <= 1 } ) val withDuplicates = elementsWithCounts.filter( (pair: Pair[Int,Int]) => { pair._2 > 1 } ) 有没有更简单的方法来解决这个问题? 解决方法
尝试这个:
val dup = List(1,102) dup.groupBy(identity).collect { case (x,List(_,_,_*)) => x } groupBy将每个不同的整数与其出现的列表相关联。收集基本上是不匹配元素被忽略的地图。匹配模式以下情况将匹配与适合模式列表(_,_,_ *)的列表相关联的整数x,该列表至少包含两个元素,每个元素由下划线表示,因为我们实际上不需要存储这些值(并且这两个元素可以跟随零个或多个元素:_ *)。 你也可以做: dup.groupBy(identity).collect { case (x,ys) if ys.lengthCompare(1) > 0 => x } 它比您提供的方法快得多,因为它不必重复传递数据。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |