Scala for迴圈語句

2019-10-16 23:14:47

for迴圈是一種重複控制結構,可以讓您有效地編寫一個需要執行特定次數的迴圈。在Scala中有各種形式的for迴圈,如下所述 -

使用範圍的for迴圈

Scala中帶範圍for迴圈的最簡單的語法是 -

for( var x <- Range ){
   statement(s);
}

在這裡,Range可以是數位範圍,並且表示為ij。 左箭頭運算子被稱為生成器,因為它從一個範圍中生成單個值。

請嘗試以下範例程式來了解Scala程式設計語言中的迴圈控制語句(for語句),參考以下範例程式碼 -

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 );
      }
   }
}

將上述程式儲存在原始檔:Demo.scala中,並使用以下命令編譯和執行此程式。

$ scalac Demo.scala
$ scala Demo

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

嘗試以下範例程式來了解Scala程式設計語言中迴圈控制語句(for語句),迴圈列印範圍ij。參考以下範例程式碼 -

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 );
      }
   }
}

將上述程式儲存原始檔在:Demo.scala 中,使用以下命令編譯和執行此程式。

$ scalac Demo.scala
$ scala Demo

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

您可以在for迴圈中使用由分號(;)分隔的多個範圍,在這種情況下,迴圈將遍歷給定範圍所有可能的計算。以下是僅使用兩個範圍的範例,也可以使用兩個以上的範圍。

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 );
      }
   }
}

將上述程式儲存在原始檔:Demo.scala中,並使用以下命令編譯和執行此程式。

$ scalac Demo.scala
$ scala Demo

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

迴圈與集合

迴圈與集合的語法如下 -

for( var x <- List ){
   statement(s);
}

這裡,List變數是一個具有元素列表的集合型別,迴圈遍歷所有元素,它一次返回一個元素到x變數中。

嘗試以下範例程式來了解一個數位集合的迴圈。 這裡我們使用List()建立了這個集合。 我們將在另一章中學習集合。以下是在Scala程式設計語言中迴圈控制語句(for語句)遍歷集合的範例程式碼。

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 );
      }
   }
}

將上述程式儲存在原始檔:Demo.scala中,並使用以下命令編譯和執行此程式。

$ scalac Demo.scala
$ scala Demo
value of a: 1
value of a: 2
value of a: 3
value of a: 4
value of a: 5
value of a: 6

for迴圈與過濾器

Scala的for迴圈允許使用一個或多個if語句過濾掉一些元素。以下是for迴圈與過濾器的語法。 要為for表示式新增多個過濾器,請使用分號(;)分隔過濾器。

for( var x <- List
      if condition1; if condition2...
   ){
   statement(s);
}

嘗試以下範例程式來了解具有過濾器的迴圈。

範例

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 );
      }
   }
}

將上述程式儲存在原始檔:Demo.scala中,並使用以下命令編譯和執行此程式。

$ scalac Demo.scala
$ scala Demo
value of a: 1
value of a: 2
value of a: 4
value of a: 5
value of a: 6
value of a: 7

for迴圈與yield

您可以將變數中的for迴圈儲存返回值,或通過函式返回。為此,您可以通過關鍵字yield來為for表示式的正文新增字首。以下是語法 -

var retVal = for{ var x <- List
   if condition1; if condition2...
}
yield x

注意 - 大括號已被用來保留變數和條件,並且retVal是一個變數,其中x的所有值將以集合的形式儲存。

嘗試以下範例程式來了解for迴圈與yield的使用。

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 );
      }
   }
}

將上述程式儲存在原始檔:Demo.scala中,並使用以下命令編譯和執行此程式。

$ scalac Demo.scala
$ scala Demo
value of a: 1
value of a: 2
value of a: 4
value of a: 5
value of a: 6
value of a: 7