首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala:从向量中删除重复整数(元组(Int,Int),.)

Scala:从向量中删除重复整数(元组(Int,Int),.)
EN

Stack Overflow用户
提问于 2020-05-06 07:08:01
回答 4查看 142关注 0票数 0

我有一个很大的向量(大约2000个元素),里面包含许多元组,Tuple(Int,Int),即

代码语言:javascript
复制
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)

我允许访问它们并在此方法中打印出来:

代码语言:javascript
复制
val (id1,id2) = ( allSource.foreach(i=>println(i._1)),  allSource.foreach(i=>i._2))

如何删除重复整数?或者我应该使用另一种方法,而不是使用foreach来访问0的元素索引。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-05-06 08:02:36

若要删除所有重复项,请按第一个元组分组,并仅在只有一个元组属于该特定键(_._1)的情况下收集元组。然后把结果压平。

代码语言:javascript
复制
myVectorEG.groupBy(_._1).collect{
  case (k, v) if v.size == 1 => v
}.flatten

这将返回一个List,如果需要一个Vector,则可以调用Vector

票数 3
EN

Stack Overflow用户

发布于 2020-05-06 08:28:59

这做了工作并保留了订单(与其他解决方案不同),但是对于2000元素来说,O(n^2)可能会慢得很:

代码语言:javascript
复制
myVectorEG.filter(x => myVectorEG.count(_._1 == x._1) == 1)

这对于较大的向量更有效,但仍然保留顺序:

代码语言:javascript
复制
val keep =
  myVectorEG.groupBy(_._1).collect{
    case (k, v) if v.size == 1 => k
  }.toSet

myVectorEG.filter(x => keep.contains(x._1))
票数 3
EN

Stack Overflow用户

发布于 2020-05-06 07:23:21

可以使用distinctBy删除重复项。

Vector[(Int, Int)]的例子中,它将如下所示

代码语言:javascript
复制
myVectorEG.distinctBy(_._1)

如果需要删除所有重复项,则更新:

您可以使用groupBy,但这将重新安排您的订单。

代码语言:javascript
复制
myVectorEG.groupBy(_._1).filter(_._2.size == 1).flatMap(_._2).toVector
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61629312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档