我了解如何在简单的整数列表上使用 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/

10-11 07:23