Scala在for循环中递增多个变量

ser*_*eda 1 scala

我正在寻找一种方法来增加for循环中的两个变量,就像可以在Java中那样:

for (int j = column + 1, i = row + 1; j < size && i < size; j++, i++) 
Run Code Online (Sandbox Code Playgroud)

如果我写在斯卡拉

for(j <- start to end; i <- start2 to end2)
Run Code Online (Sandbox Code Playgroud)

这将转换为嵌套循环,但是我需要它在原始循环中运行,并在第一个增量结束时停止。

Mar*_*sky 5

您可以这样写:

val column = 5; val row = 3; val size = 10; // some input..

for {
  (i, j) <- (row + 1 to size - 1) zip (column + 1 to size - 1)
} {
  println(s"i=$i j=$j")
}

/* prints:
i=4 j=6
i=5 j=7
i=6 j=8
i=7 j=9
*/
Run Code Online (Sandbox Code Playgroud)

关键是,你不希望有所有组合(for { i <- ... ; j <- ... }中)i的和j的。而是希望它们一起增加。

因此,您可以创建一个范围(start to end)zip并与另一个范围一起创建。(该操作将删除较长序列的尾巴-这基本上可以确保j < size && i < size条件。)

剩下的只是语法上的糖,用于匹配压缩的元组as ij变量。