Цикл for в Scala
Цикл for позволяет написать структуру управления циклом, которая выполняется заданное число раз.
Синтаксис
В языке Scala синтаксис циклаfor:
for( var x <- Range ){
statement(s);
}
В приведённом выше синтаксисе,Rangeможет быть числовым диапазоном, представленным какi to j, илиi until j. Левая стрелка <- используется для присваивания значения переменной x.
Пример
Ниже приведён пример использования синтаксисаi to j(включая j):
Пример
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):
Пример
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,можно использовать точку с запятой (;) для задания нескольких диапазонов. Он переберёт все возможные значения заданных диапазонов. В следующем примере демонстрируется цикл с двумя диапазонами:
Пример
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()для создания коллекции. В последующих главах мы подробно рассмотрим коллекции.
Пример
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:
Пример
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:
Пример
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