在Kotlin中将2个列表进行比较

Has*_*sef 3 kotlin

我有这两个清单:

val forecast = listOf(30, 21, 29, 31, 40, 48, 53, 47, 37, 39, 31, 29)
val actual = listOf(27, 31, 27, 26, 21, 13, 21, 18, 33, 35, 40, 36)
Run Code Online (Sandbox Code Playgroud)

并且需要计算每个月的预测误差,这是forecast-actual我尝试过以下内容:

var errors: MutableList<Double> = mutableListOf<Double>()

actual
      .forEachIndexed { index, d ->  forecast[index] - d}
      .let { i -> errors.add(i) }
Run Code Online (Sandbox Code Playgroud)

但没有奏效,因为i结果forEachIndexedUnit不是Double:(

Bre*_*tty 12

你想要比forEach做更多的地图.我会做以下事情然后把它变成你正在寻找的任何类型(如果你真的想要一个可变的double列表):

val errors = forecast.zip(actual).map { it.first - it.second }
Run Code Online (Sandbox Code Playgroud)

将列表压缩在一起会为您提供一个元组列表,其中第一个值来自第一个列表(预测),第二个值来自第二个列表(实际).然后,您可以将该列表映射到每个元组中的值之间的差异.Map返回一个新列表,其中包含应用于每个项目的更改,而forEach会对每个项目执行此功能,但不会生成新列表.

或者更精益的方式:

val errors = forecast.zip(actual){f,a -> f-a)
Run Code Online (Sandbox Code Playgroud)

  • 我会更进一步:`forecast.zip(actual).map {(f,a) - > f - a}` (2认同)