gpt4 book ai didi

scala - 删除冗余条目,scala 方式

转载 作者:行者123 更新时间:2023-12-02 23:46:04 25 4
gpt4 key购买 nike

编辑:添加了列表已排序的事实,并且认识到“重复”具有误导性,因此在标题中将其替换为“冗余”。

我有一个排序的条目列表,说明给定间隔内的生产值。稍后陈述完全相同值的条目不会添加任何信息,可以安全地忽略。

case class Entry(minute:Int, production:Double)
val entries = List(Entry(0, 100.0), Entry(5, 100.0), Entry(10, 100.0), Entry(20, 120.0), Entry(30, 100.0), 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,100.0), Entry(20,120.0), Entry(30,100.0), Entry(180,0.0))

有什么意见吗?我错过了一些 scala 魔法吗?

最佳答案

当您比较列表中的连续条目时,首先用zip-ping列表的尾部来获取连续元素对的列表。

下面,我从列表中取出第一个条目,并使用 collect 同时过滤出产生式未更改的对,对于剩余的对,映射 e2 。 (collect 是 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,100.0), Entry(20,120.0), Entry(30,100.0), Entry(180,0.0))

更新为了简单起见,这里假设条目不为空。

关于scala - 删除冗余条目,scala 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2571303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com