scala for循环问题与赋值

时间:2017-03-03 15:12:45

标签: scala for-loop

val u = Array(1,2,3,4,5)                         
var outsideValue = 7                             

for{
 i <- 0 until u.size
 _= outsideValue = u(i)
 if(outsideValue == 2)
 j <- u
}
{

println(s"$outsideValue $j")

`Expected output is it should print all combination of Array with value 2, but it is not printing !!!`

注意:我知道我们可以简单地做到这一点 但我想知道为什么上面的代码不起作用

1 个答案:

答案 0 :(得分:0)

首先让我们先介绍一下如何使用其他任何语言进行此操作,

爪哇

String[] u = {1, 2, 3, 4, 5};

for (int i = 0; i < u.length(); i++) {
  if (u[i] == 2) {
    for (int j = 0; j < u.length(); j++) {
      System.out.println("" + u[i] + ", " + u[j]);
    }
  }
}

的JavaScript,

var u = [1, 2, 3, 4, 5];

for (var i = 0; i < u.length(); i++) {
  if (u[i] == 2) {
    for (var j = 0; j < u.length(); j++) {
      console.log("" + u[i] + ", " + u[j]);
    }
  }
}

您可以使用for-loop在Scala中以相同的方式执行此操作。 (不要与for-comprehension

的概念混淆
val u = new Array(1, 2, 3, 4, 5)

for (i <- 0 until u.length()) {
  if (u(i) == 2) {
    for (j <- 0 until u.length()) {
      println(s"${u(i)}, ${u(j)})
    }
  }
}

如果您想使用for-comprehension,那么

val u = Array(1, 2, 3, 4, 5)

for {
  i <- u.filter(_ == 2)
  j <- u
} println(s"$i, $j")

至于&#34;为什么你的代码不起作用?&#34;。原因是你试图在不理解这些的情况下使用for-understanding,这会导致一个非常奇怪的外观和错误的代码。

Scala中的

for-comprehension可以根据使用情况以各种方式使用map / flatMap / foreach / flatten的组合。

在这种情况下,上述for-comprehension版本相当于以下基于foreach的版本,

val array = Array(1, 2, 3, 4, 5)

array.filter(_ == 2).foreach(i => {
  array.foreach(j => println(s"$i, $j")
})