删除冗余条目,scala方式
发布时间:2020-12-16 18:30:34 所属栏目:安全 来源:网络整理
导读:编辑:添加了一个事实,即列表已排序,并且实现“重复”会产生误导,将其替换为标题中的“冗余”. 我有一个条目的排序列表,说明给定时间间隔内的生产值.以后声明完全相同的值的条目不会添加任何信息,可以安全地省略. case class Entry(minute:Int,production:Do
编辑:添加了一个事实,即列表已排序,并且实现“重复”会产生误导,将其替换为标题中的“冗余”.
我有一个条目的排序列表,说明给定时间间隔内的生产值.以后声明完全相同的值的条目不会添加任何信息,可以安全地省略. case class Entry(minute:Int,production:Double) val entries = List(Entry(0,100.0),Entry(5,Entry(10,Entry(20,120.0),Entry(30,Entry(180,0.0)) 尝试使用scala 2.8集合函数,到目前为止,我有这个工作实现: entries.foldRight(List[Entry]()) { (entry,list) => list match { case head :: tail if (entry.production == head.production) => entry :: tail case head :: tail => entry :: list case List() => entry :: List() } } res0: List[Entry] = List(Entry(0,0.0)) 任何意见?我错过了一些斯卡拉魔法吗? 解决方法
当您比较列表中的连续条目时,首先使用其尾部压缩列表以获取连续元素对的列表.
下面,我从列表中获取第一个条目,并使用collect同时过滤掉生产未更改的对,对于其余对,映射e2. (在Scala 2.8中收集是新的,有一段时间称为partialMap) scala> entries.head :: ((entries zip entries.tail).collect { case (Entry(_,p1),e2@Entry(_,p2)) if p1 != p2 => e2 }) res13: List[Entry] = List(Entry(0,0.0)) 更新为简单起见,假设条目不为空. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |