遍历案例类列表,仅输出单个案例类

问题描述 投票:0回答:1

我如何遍历案例类列表,仅输出单个案例类,只选择一个符合条件的行。

例如,对于案例类abc的列表,我想捕获该行,例如该行的abc.a + abc.b大于任何其他行的任何其他abc.a + abc.b并且也大于100.如果以上条件相同,则捕获mod为200s的行。如果所有行的a + b都小于100,则我什么也不输出。

保证mod 100s中的a和b会有所不同。同样,mod 200s中的a和b会有所不同

case class abc(id: int, mod: Int, a: Int, b: Int)
case class output(id: int, mod: Int, calc: Int).  // calc = a + b

val a = List( abc(1, 101, 56, 47),
              abc(1, 201, 34, 23),
              abc(1, 102, 12, 33),
              abc(1, 103, 21, 34),
              abc(1, 202, 23, 34),
              abc(1, 203, 23, 35))

val out1: Option[Output] = Some(output(1, 101, 103))

val b = List( abc(1, 101, 56, 47),
              abc(1, 201, 34, 23),
              abc(1, 102, 12, 33),
              abc(1, 103, 21, 34),
              abc(1, 202, 47, 56),
              abc(1, 203, 23, 35))

val out2: Option[Output] = Some(output(1, 202, 103))
scala scala-collections
1个回答
0
投票

通常,您可以通过以下方法完成您想做的事情:

list.foldLeft(None: Option[output]) {
  case (Some(oldMax), a) =>
    val newMax = ... // calculate output
    Some(if (check if new output is bigger) newMax else oldMax)
  case (None, a)
    Some(calculate first max)
}

我不会实现输出的比较和计算不会完全破坏乐趣。

© www.soinside.com 2019 - 2024. All rights reserved.