加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何从列表中删除2个或更多的重复项并维护其初始订单?

发布时间:2020-12-16 09:33:51 所属栏目:安全 来源:网络整理
导读:假设我们有一个Scala列表: val l1 = List(1,2,3,1,5,1) 我们可以使用以下代码轻松删除重复项: l1.distinct 要么 l1.toSet.toList 但是,如果我们想要删除重复的文件,只要它们超过2个,怎么办?所以如果有超过2个具有相同值的元素,我们只剩下两个元素,并
假设我们有一个Scala列表:

val l1 = List(1,2,3,1,5,1)

我们可以使用以下代码轻松删除重复项:

l1.distinct

要么

l1.toSet.toList

但是,如果我们想要删除重复的文件,只要它们超过2个,怎么办?所以如果有超过2个具有相同值的元素,我们只剩下两个元素,并删除其余的元素。

我可以用下面的代码来实现:

l1.groupBy(identity).mapValues(_.take(2)).values.toList.flatten

这给了我结果:

List(2,3)

元素被删除,但剩余元素的顺序与初始列表中出现的元素的顺序不同。如何做这个操作并保持从原始列表的顺序?

所以l1的结果应该是:

List(1,5)

解决方法

不是最有效率的。

scala> val l1 = List(1,1)
l1: List[Int] = List(1,1)

scala> l1.zipWithIndex.groupBy( _._1 ).map(_._2.take(2)).flatten.toList.sortBy(_._2).unzip._1
res10: List[Int] = List(1,5)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读