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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |