我了解如何在简单的整数列表上使用 reduceLeft,但尝试在 case 类对象失败时使用。
假设我有:
case class LogMsg(time:Int, cat:String, msg:String)
val cList = List(LogMsg(1,"a", "bla"), LogMsg(2,"a", "bla"), LogMsg(4,"b", "bla"))
我想找到 LogMsgs 之间的最大时间差异。
我想做类似的事情:
cList.reduceLeft((a,b) => (b.time - a.time)
这当然不起作用。
reduceLeft 的第一次迭代比较前两个元素,它们都是 LogMsg 类型。之后,它将下一个元素 (LogMsg) 与第一次迭代的结果 (Int) 进行比较。
我只是语法错误还是应该以另一种方式这样做?
最佳答案
我可能会做这样的事情:
(cList, cList.tail).zipped.map((a, b) => b.time - a.time).max
您需要事先检查
cList
至少有 2 个元素。reduceLeft
不能用于返回最大的差异,因为它总是返回您要减少的 List 的类型,即在这种情况下为 LogMsg
,而您要求的是 Int
。关于scala - 如何在案例类上使用 Scala reduceLeft?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9099730/