在Kotlin中比较两个列表
我有以下两个列表:在Kotlin中比较两个列表,kotlin,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) 并且需要计算每个月的预测误差,即预测实际值,因此我尝试了以下方法: var errors: MutableList<Double> = mutableListOf<Double>
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)
并且需要计算每个月的预测误差,即预测实际值
,因此我尝试了以下方法:
var errors: MutableList<Double> = mutableListOf<Double>()
actual
.forEachIndexed { index, d -> forecast[index] - d}
.let { i -> errors.add(i) }
var错误:MutableList=mutableListOf()
实际的
.forEachIndexed{index,d->forecast[index]-d}
.let{i->errors.add(i)}
但是不起作用,因为由
foreachdexed
生成的i
是一个单元
而不是一个Double
:(你想做的更多的是一个映射而不是一个forEach。我会做以下操作,然后将它放入你想要的任何类型中(如果你真的想要一个Double的可变列表):
将这些列表压缩在一起可以得到一个元组列表,其中第一个值来自第一个列表(预测),第二个值来自第二个列表(实际)。然后您可以将该列表映射到每个元组中的值之间的差异。map返回一个新列表,其中包含应用于每个项的更改,而forEach对每个项执行函数,但不生成新列表
或者更为精简的方式:
val errors = forecast.zip(actual){f,a -> f-a)
问题:
actual.forEachIndexed { index, d ->
errors.add(forecast[index] - d.toDouble())
}
对forEachIndex
的返回值应用let
,该值为Unit
解决方案:
actual.forEachIndexed { index, d ->
errors.add(forecast[index] - d.toDouble())
}
只需使用mapIndexed而不是foreachIndexed:
val result = forecast.mapIndexed { i, f -> f - actual[i] }
(或者,当然):
我想再进一步一点:
forecast.zip(actual).map{(f,a)->f-a}
感谢您的详细解释。这是我的案例的完美答案,但是有两个以上的列表,我的答案可能是一个。
val result = actual.mapIndexed { i, a -> forecast[i] - a }