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

删除冗余条目,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))

更新为简单起见,假设条目不为空.

(编辑:李大同)

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

    推荐文章
      热点阅读