Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Kotlin中比较两个列表_Kotlin - Fatal编程技术网

在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 }