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 !!!`
注意:我知道我们可以简单地做到这一点 但我想知道为什么上面的代码不起作用
答案 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")
})