Цикл for в Scala

Scala 循环Циклы в Scala

Цикл for позволяет написать структуру управления циклом, которая выполняется заданное число раз.


Синтаксис

В языке Scala синтаксис циклаfor:

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

В приведённом выше синтаксисе,Rangeможет быть числовым диапазоном, представленным какi to j, илиi until j. Левая стрелка <- используется для присваивания значения переменной x.

Пример

Ниже приведён пример использования синтаксисаi to j(включая j):

Пример

object Test {
   def main(args: Array[String]) {
      var a = 0;
      // цикл for
      for( a <- 1 to 10){
         println( "Значение a: " + a );
      }
   }
}

Выполнение приведенного выше кода выводит результат:

$ scalac Test.scala
$ scala Test
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

Ниже приведён пример использования синтаксисаi until j(не включая j):

Пример

object Test {
   def main(args: Array[String]) {
      var a = 0;
      // цикл for
      for( a <- 1 until 10){
         println( "Значение a: " + a );
      }
   }
}

Выполнение приведенного выше кода выводит результат:

$ scalac Test.scala
$ scala Test
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

InВ цикле for,можно использовать точку с запятой (;) для задания нескольких диапазонов. Он переберёт все возможные значения заданных диапазонов. В следующем примере демонстрируется цикл с двумя диапазонами:

Пример

object Test {
   def main(args: Array[String]) {
      var a = 0;
      var b = 0;
      // цикл for
      for( a <- 1 to 3; b <- 1 to 3){
         println( "Значение a: " + a );
         println( "Значение b: " + b );
      }
   }
}

Выполнение приведенного выше кода выводит результат:

$ scalac Test.scala
$ scala Test
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 Цикл по коллекциям

Синтаксис цикла for по коллекциям выглядит следующим образом:

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

В приведённом выше синтаксисе,Listпеременная является коллекцией, и цикл for перебирает все элементы коллекции.

Пример

В следующем примере выполняется перебор числовой коллекции. Мы используемList()для создания коллекции. В последующих главах мы подробно рассмотрим коллекции.

Пример

object Test {
   def main(args: Array[String]) {
      var a = 0;
      val numList = List(1,2,3,4,5,6);

      // цикл for
      for( a <- numList ){
         println( "Значение a: " + a );
      }
   }
}

Выполнение приведенного выше кода выводит результат:

$ scalac Test.scala
$ scala Test
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 может использовать один или несколькоifоператоров для фильтрации некоторых элементов.

Ниже приведён синтаксис использования фильтров в цикле for.

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

Вы можете использовать точки с запятой (;) для добавления одного или нескольких условий фильтрации в выражение.

Пример

Ниже приведён пример фильтрации в цикле for:

Пример

object Test {
   def main(args: Array[String]) {
      var a = 0;
      val numList = List(1,2,3,4,5,6,7,8,9,10);

      // цикл for
      for( a <- numList
           if a != 3; if a < 8 ){
         println( "Значение a: " + a );
      }
   }
}

Выполнение приведенного выше кода выводит результат:

$ scalac Test.scala
$ scala Test
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 в переменной. Синтаксис следующий:

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

Обратите внимание, что фигурные скобки используются для хранения переменных и условий,retVal— это переменная. В цикле yield записывает текущий элемент, сохраняет его в коллекцию, и после завершения цикла эта коллекция возвращается.

Пример

В следующем примере демонстрируется использование yield в цикле for:

Пример

object Test {
   def main(args: Array[String]) {
      var a = 0;
      val numList = List(1,2,3,4,5,6,7,8,9,10);

      // цикл for
      var retVal = for{ a <- numList
                        if a != 3; if a < 8
                      }yield a

      // вывод возвращаемого значения
      for( a <- retVal){
         println( "Значение a: " + a );
      }
   }
}

Выполнение приведенного выше кода выводит результат:

$ scalac Test.scala
$ scala Test
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 循环Циклы в Scala

Другие расширения