如果你是程序员,对for语句肯定已经了如指掌了,但是scala中的for和c,java中的for有一些不同之处,还是需要我们来学习一下的。
最简单的scala for语句
for(i <- 1 to 10) {
println("i is " + i);
}
上面的for i从1到10(包含10)来做循环
scala在for循环中对循环变量i的赋值用了“<-”符号,1 to 10指定了一个范围,i在这个范围内做循环,这个范围包括1和10
这里的1 to 10本质上是一个方法,这个方法返回的是一个Range类型,它等价于下面的代码
(1).to(10);
在scala中一切皆是对象所以,这里的1就是一个对象,他有一个to方法,返回一个Range。
如果在for循环中只有一条语句,那么可以省略掉花括号,如下代码
for(i <- 1 to 10)
println("i is " + i);
until 和 to关键字
在scala中还有一个和上面的to关键字有类似作用的关键字until,它的不同之处在于不包括最后一个元素
for(i <- 1 to 10) {
println("i is " + i);
}
for(i <- 1 until 10) {
println("i is " + i);
}
上面代码中的第一个循环会循环打印1到10包括10,而第二个循环打印1到9,不包含10
for语句遍历数组
可以通过下面两种方法遍历数组元素
var myArray : Array[String] = new Array[String](10);
for(i <- 0 until myArray.length){
myArray(i) = "value is: " + i;
}
for(value : String <- myArray ) {
println(value);
}
上面代码中第一个for是通过数组下标来做遍历的,而第二个for是直接遍历数组的元素
for语句和if条件结合过滤部分循环
在scala的for循环语句中可以使用if语句来做for条件过滤,例如
var myArray : Array[String] = new Array[String](10);
for(i <- 0 until myArray.length){
myArray(i) = "value is: " + i;
}
for(value : String <- myArray if value.endsWith("5")) {
println(value);
}
注意第二个for语句的括号内有if关键字,它后面紧跟if的条件使只有满足条件的元素来执行for语句块。上面的语句和下面的语句是类似的,不过更精简了一些
for(value : String <- myArray) {
if value.endsWith("5"){
println(value);
}
}
scala的for语句中支持多个if条件,多个if之间用;来分割,如下例子
for(value : String <- myArray
if value.endsWith("5");
if value.indexOf("value") != -1 ) {
println(value);
}
多个if条件必须同时满足,才会执行for语句块内的代码
上面的for语句和下面的语句是等价的
for(value : String <- myArray) {
if( value.endsWith("5") && value.indexOf("value") != -1){
println(value);
}
}
嵌套循环
如下是一个嵌套for循环的例子,我们声明了一个二维的字符串数组,在for循环里面做遍历
var myArray : Array[Array[String]] = new Array[Array[String]](10);
for(i <- 0 until myArray.length){
myArray(i) = new Array[String](10);
for(j <- 0 until myArray(i).length){
myArray(i)(j) = "value is: " + i + ", " + j;
}
}
上面的嵌套for语句,也可以简写如下
for(anArray : Array[String] <- myArray;
aString : String <- anArray ) {
println(aString);
}
上面的for语句中有两个范围的遍历,首先是anArray对myArray的遍历,然后是aString对anArray的遍历
scala的for循环中还支持中间变量的绑定
如下例子在嵌套的for循环中多了aStringUC的中间变量,这个中间变量是aString的大写,同时在这个for语句中还有两个if语句
for(anArray : Array[String] <- myArray;
aString : String <- anArray;
aStringUC = aString.toUpperCase()
if aStringUC.indexOf("VALUE") != -1;
if aStringUC.indexOf("5") != -1 ) {
println(aString);
}
总结
scala的for循环更强大了,它可以支持下标循环,也可以直接支持对数组集合元素的遍历,还支持在for循环中使用if条件,支持将多个嵌套的for循环写到一个for语句内