在Scala中基于先前索引构建数组/列表的惯用方法
我试图用Scala中的自回归公式建立一个时间序列。该等式将查找目标阵列的先前索引和其他两个阵列的当前索引。虚拟方程示例:在Scala中基于先前索引构建数组/列表的惯用方法,scala,Scala,我试图用Scala中的自回归公式建立一个时间序列。该等式将查找目标阵列的先前索引和其他两个阵列的当前索引。虚拟方程示例: z_i=z[i-1]-x[i]+y[i] 这是命令式的(见下面的C++示例),但我正在试图找出斯卡拉的惯用方法。我已经创建了一个带有while循环的解决方案,但它感觉笨重且不美观 #包括 #包括 int main(){ std::向量x{1,2,3,4}; std::向量y{10,9,8,7}; 向量z{0,0,0,0}; 对于(int i=1;i
z_i=z[i-1]-x[i]+y[i]
这是命令式的(见下面的C++示例),但我正在试图找出斯卡拉的惯用方法。我已经创建了一个带有
while
循环的解决方案,但它感觉笨重且不美观
#包括
#包括
int main(){
std::向量x{1,2,3,4};
std::向量y{10,9,8,7};
向量z{0,0,0,0};
对于(int i=1;i std::cout不是修改现有的z
,而是要从x
和y
构建它
val x = Vector(1, 2, 3, 4)
val y = Vector(10, 9, 8, 7)
val z = (x.tail zip y.tail).scanLeft(0){case (nz,(nx,ny)) => nz - nx + ny}
//z: Vector[Int] = Vector(0, 7, 12, 15)
您不需要修改现有的z
,而需要从x
和y
构建它
val x = Vector(1, 2, 3, 4)
val y = Vector(10, 9, 8, 7)
val z = (x.tail zip y.tail).scanLeft(0){case (nz,(nx,ny)) => nz - nx + ny}
//z: Vector[Int] = Vector(0, 7, 12, 15)