我有一个很大的向量(大约2000个元素),里面包含许多元组,Tuple(Int,Int),即
val myVectorEG = Vector((65,61), (29,49), (4,57), (12,49), (24,98), (21,52), (81,86), (91,23), (73,34), (97,41),...))我希望删除索引(0)处的每个元组的重复/重复整数,i.e. if Tuple(65,xx) repeated at other Tuple(65, yy) inside the vector, it should be removed)
我允许访问它们并在此方法中打印出来:
val (id1,id2) = ( allSource.foreach(i=>println(i._1)), allSource.foreach(i=>i._2))如何删除重复整数?或者我应该使用另一种方法,而不是使用foreach来访问0的元素索引。
发布于 2020-05-06 08:02:36
若要删除所有重复项,请按第一个元组分组,并仅在只有一个元组属于该特定键(_._1)的情况下收集元组。然后把结果压平。
myVectorEG.groupBy(_._1).collect{
case (k, v) if v.size == 1 => v
}.flatten这将返回一个List,如果需要一个Vector,则可以调用Vector。
发布于 2020-05-06 08:28:59
这做了工作并保留了订单(与其他解决方案不同),但是对于2000元素来说,O(n^2)可能会慢得很:
myVectorEG.filter(x => myVectorEG.count(_._1 == x._1) == 1)这对于较大的向量更有效,但仍然保留顺序:
val keep =
myVectorEG.groupBy(_._1).collect{
case (k, v) if v.size == 1 => k
}.toSet
myVectorEG.filter(x => keep.contains(x._1))发布于 2020-05-06 07:23:21
可以使用distinctBy删除重复项。
在Vector[(Int, Int)]的例子中,它将如下所示
myVectorEG.distinctBy(_._1)如果需要删除所有重复项,则更新:
您可以使用groupBy,但这将重新安排您的订单。
myVectorEG.groupBy(_._1).filter(_._2.size == 1).flatMap(_._2).toVectorhttps://stackoverflow.com/questions/61629312
复制相似问题