在Scala中使用条件实现嵌套循环

时间:2012-10-31 16:50:39

标签: java scala

在Scala中实现以下代码的惯用方法是什么?

for (int i = 1; i < 10; i+=2) {
  // i = 1, 3, 5, 7, 9
  bool intercept = false;

  for (int j = 1; j < 10; j+=3) {
    // j = 1, 4, 7
    if (i==j) intercept = true
  }

  if (!intercept) {
    System.out.println("no intercept")
  }
}

2 个答案:

答案 0 :(得分:6)

您可以使用Range和朋友:

if (((1 until 10 by 2) intersect (1 until 10 by 3)).isEmpty)
  System.out.println("no intercept")

这不涉及嵌套循环(您在标题中引用),但它是一种更加惯用的方式来在Scala中获得相同的结果。

编辑:正如Rex Kerr指出的那样,上面的版本每次都不会打印消息,但以下内容确实如此:

(1 until 10 by 2) filterNot (1 until 10 by 3 contains _) foreach (
   _ => println("no intercept")
)

答案 1 :(得分:6)

编辑:哎呀,您为每个i打印。在那种情况下:

for (i <- 1 until 10 by 2) {
  if (!(1 until 10 by 3).exists(_ == i)) println("no intercept")
}

在这种情况下,您实际上并不需要这个条件:contains方法将检查您想要在内循环中检查的内容。

for (i <- 1 until 10 by 2) {
  if (!(1 until 10 by 3).contains(i)) println("no intercept")
}