Scala for循环示例

2019-08-21 10:53:33 浏览数 (1)

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

0 人点赞