从序列中删除唯一的项目

时间:2014-08-18 19:07:21

标签: scala

我发现了很多关于如何删除重复项的内容,但是首先删除唯一项目然后删除剩余重复项的最优雅方法是什么。

E.g。序列(1,2,5,2,3,4,4,0,2)应转换为(2,4)。

我可以考虑使用for循环为每个不同的项添加计数,但我可以想象Scala有更优雅的方法来实现这一点。

3 个答案:

答案 0 :(得分:2)

distinctdiff适合您:

val a = List(1, 2, 5, 2, 3, 4, 4, 0, 2)
> a: List[Int] = List(1, 2, 5, 2, 3, 4, 4, 0, 2)

val b = a diff a.distinct
> b: List[Int] = List(2, 4, 2)

val c = (a diff a.distinct).distinct
> c: List[Int] = List(2, 4)

到位distinct您也可以使用toSet

答案 1 :(得分:1)

另请注意,i => i可以由identitymap(_._1)替换为keys,如下所示:

Seq(1, 2, 5, 2, 3, 4, 4, 0, 2).groupBy(identity).filter(_._2.size > 1).keys.toSeq

这是countByKey方法(例如可以在Spark的API中找到的方法)的用法。

答案 2 :(得分:0)

非常直接:

Seq(1, 2, 5, 2, 3, 4, 4, 0, 2).groupBy(i => i).filter(_._2.size > 1).map(_._1).toSeq

使用Ende Neu的链接我认为你的代码会变成这样:

 Seq(1, 2, 5, 2, 3, 4, 4, 0, 2).groupBy(identity).collect { case (v, l) if l.length > 1 => v } toSeq