在scala中转换C循环的连续更新值
我有一个在scala中转换C循环的连续更新值,scala,Scala,我有一个ccode 我想在scala中转换它 这是c代码 我没有得到的部分,我如何才能使用scala中的更新值 在这种情况下可以使用foldLeft吗 int value=9999,i,j,length=10; A和B是一些2D整数数组,每个元素的值都在变化。对于整个循环,它不是固定的 for(i=0;i<=5;i++){ for(j=0;j<=5;j++){ if(A[i][j]==value && B[i][j]==value)
c
code
我想在scala中转换它
这是c
代码
我没有得到的部分,我如何才能使用scala中的更新值
在这种情况下可以使用foldLeft吗
int value=9999,i,j,length=10;
A
和B
是一些2D
整数数组,每个元素的值都在变化。对于整个循环,它不是固定的
for(i=0;i<=5;i++){
for(j=0;j<=5;j++){
if(A[i][j]==value && B[i][j]==value)
length=length+44;
else if(A[i][j]!=value && B[i][j]==value)
if(length< 'Some value')
length=length+11
else
if(length< 'Some value')
length=length+22
}
}
for(i=0;i等效代码可能如下所示:
def someValue(x: Int, y: Int): Int = ... // I'm treating this as some function that takes the array values and returns an Int
val A: Array[Array[Int]] = ...
val B: Array[Array[Int]] = ...
val Value = 9999 // Capitalised, so it can be used directly in case matches
( for {
i <- 0 to 5
j <- 0 to 5
} yield ((i, j)) ).foldLeft(10){ case (length, (i,j)) => (A(i)(j), B(i)(j)) match {
case (Value, Value) => length + 44
case (other, Value) if other != Value =>
if (length < someValue(A(i)(j), B(i)(j))) {
length + 11
} else {
length
}
case _ => length
}
}
def someValue(x:Int,y:Int):Int=…//我将其视为接受数组值并返回Int的函数
val A:Array[Array[Int]=。。。
val B:Array[Array[Int]=。。。
val Value=9999//已大写,因此可以直接用于大小写匹配
(用于{
i长度+44
如果其他!=值=>
if(长度长度
}
}
我停止了length
与someValue
的第二次比较,因为不清楚如何在上面的C
代码中找到这段代码。您是否尝试过用scala编写它?只要试着解释一下您的问题是什么,您就会得到帮助:)您可以使用进行理解,您可以使用折叠
或递归。您可以使用var
或val
进行中间结果-有很多方法可以做到这一点。您还可以几乎直接将您的代码翻译为Scala。感谢您的宝贵意见。我尝试了foldleft,它对我很有效。非常感谢您的支持回复:)感谢您的回复:)