for循环是一种重复控制结构,允许你高效地编写需要执行特定次数的循环。下面的示例以各种形式描述了Scala中的for循环。
语法——带范围的for循环(for loop with ranges)
在Scala里,最简单的带范围的for循环语法如下:
代码语言:javascript复制for( var x <- Range ){
statement(s);
}
以上语法中,Range是一个以i to j或者i until j表示的数值范围,左箭头操作符<-称作生成器,因为它从一个范围内生成单独的值。
以下是用Scala实现的for循环的示例。
示例1:i to j
代码语言:javascript复制object Demo {
def main(args: Array[String]) {
var a = 0;
// for loop execution with a range
for( a <- 1 to 10){
println( "Value of a: " a );
}
}
}
输出:
代码语言:javascript复制value of a: 1
value of a: 2
value of a: 3
value of a: 4
value of a: 5
value of a: 6
value of a: 7
value of a: 8
value of a: 9
value of a: 10
示例2:i util j
代码语言:javascript复制object Demo {
def main(args: Array[String]) {
var a = 0;
// for loop execution with a range
for( a <- 1 until 10){
println( "Value of a: " a );
}
}
}
输出:
代码语言:javascript复制value of a: 1
value of a: 2
value of a: 3
value of a: 4
value of a: 5
value of a: 6
value of a: 7
value of a: 8
value of a: 9
示例3:用分号(;)分隔多个范围
你可以在for循环中使用分号(;)分隔多个范围,在这种情况下,循环将遍历给定范围的所有逻辑。下面是一个只使用两个范围的例子,你也可以使用两个以上的范围:
代码语言:javascript复制object Demo {
def main(args: Array[String]) {
var a = 0;
var b = 0;
// for loop execution with a range
for( a <- 1 to 3; b <- 1 to 3){
println( "Value of a: " a );
println( "Value of b: " b );
}
}
}
输出:
代码语言:javascript复制Value of a: 1
Value of b: 1
Value of a: 1
Value of b: 2
Value of a: 1
Value of b: 3
Value of a: 2
Value of b: 1
Value of a: 2
Value of b: 2
Value of a: 2
Value of b: 3
Value of a: 3
Value of b: 1
Value of a: 3
Value of b: 2
Value of a: 3
Value of b: 3
示例4:for循环集合
以下是for循环集合的语法:
代码语言:javascript复制for( var x <- List ){
statement(s);
}
在这里,List变量是一个包含元素列表的集合类型,for循环遍历所有元素,每次返回x变量中的一个元素。示例如下:
代码语言:javascript复制object Demo {
def main(args: Array[String]) {
var a = 0;
val numList = List(1,2,3,4,5,6);
// for loop execution with a collection
for( a <- numList ){
println( "Value of a: " a );
}
}
}
输出:
代码语言:javascript复制object Demo {
def main(args: Array[String]) {
var a = 0;
val numList = List(1,2,3,4,5,6);
// for loop execution with a collection
for( a <- numList ){
println( "Value of a: " a );
}
}
}
示例5:带过滤条件的for循环
Scala的for循环允许用一个或多个if语句过滤出符合条件的元素,以下是语法,可以用分号(;)分隔多个过滤条件:
代码语言:javascript复制for( var x <- List
if condition1; if condition2...
){
statement(s);
}
示例如下:
代码语言:javascript复制object Demo {
def main(args: Array[String]) {
var a = 0;
val numList = List(1,2,3,4,5,6,7,8,9,10);
// for loop execution with multiple filters
for( a <- numList
if a != 3; if a < 8 ){
println( "Value of a: " a );
}
}
}
输出:
代码语言:javascript复制object Demo {
def main(args: Array[String]) {
var a = 0;
val numList = List(1,2,3,4,5,6,7,8,9,10);
// for loop execution with multiple filters
for( a <- numList
if a != 3; if a < 8 ){
println( "Value of a: " a );
}
}
}
示例6: 带yield关键字的for循环
你可以将for循环中的返回值存储在变量中,也可以通过函数返回。为此,你可以在for表达式的主体前面加上关键字yield。下面是语法:
代码语言:javascript复制var retVal = for{ var x <- List
if condition1; if condition2...
}
yield x
注意:大括号用于保存变量和条件,retVal是一个变量,其中x的所有值都将以集合的形式存储。
示例:
代码语言:javascript复制object Demo {
def main(args: Array[String]) {
var a = 0;
val numList = List(1,2,3,4,5,6,7,8,9,10);
// for loop execution with a yield
var retVal = for{ a <- numList if a != 3; if a < 8 }yield a
// Now print returned values using another loop.
for( a <- retVal){
println( "Value of a: " a );
}
}
}
输出:
代码语言:javascript复制value of a: 1
value of a: 2
value of a: 4
value of a: 5
value of a: 6
value of a: 7
编译自:Scala - for Loops