Циклы: выражение for...in
Эта конструкция циклического цикла используется для итерации совпадений шаблона в перечисленной коллекции, такой как выражение диапазона, последовательность, список, массив или другая конструкция, поддерживающая перечисление.
Синтаксис
for pattern in enumerable-expression do
body-expression
Замечания
for...in
Выражение можно сравнить с for each
инструкцией на других языках .NET, так как оно используется для циклического перебора значений в перечисленной коллекции. Однако также for...in
поддерживает сопоставление шаблонов по коллекции вместо простой итерации по всей коллекции.
Перечисленное выражение можно указать как перечисленную коллекцию или с помощью ..
оператора. Перечисленные коллекции включают списки, последовательности, массивы, наборы, карты и т. д. Любой тип, реализующий System.Collections.IEnumerable
его, можно использовать.
При выражении диапазона с помощью ..
оператора можно использовать следующий синтаксис.
запустите .. Закончить
Можно также использовать версию, которая включает добавочный элемент, называемый пропуском, как показано в следующем коде.
запустите .. пропустите .. Закончить
Если значение пропуска не указано, то следующее значение, созданное в коллекции, увеличивается на 1. При указании пропуска оно увеличивается по указанному значению.
Значения, соответствующие шаблону, также можно использовать в выражении текста.
В следующих примерах кода показано использование for...in
выражения.
// Looping over a list.
let list1 = [ 1; 5; 100; 450; 788 ]
for i in list1 do
printfn "%d" i
Выходные данные выглядят следующим образом.
1
5
100
450
788
В следующем примере показано, как циклировать по последовательности и как использовать шаблон кортежа вместо простой переменной.
let seq1 = seq { for i in 1 .. 10 -> (i, i*i) }
for (a, asqr) in seq1 do
printfn "%d squared is %d" a asqr
Выходные данные выглядят следующим образом.
1 squared is 1
2 squared is 4
3 squared is 9
4 squared is 16
5 squared is 25
6 squared is 36
7 squared is 49
8 squared is 64
9 squared is 81
10 squared is 100
В следующем примере показано, как выполнять цикл по простому диапазону целых чисел.
let function1() =
for i in 1 .. 10 do
printf "%d " i
printfn ""
function1()
Выходные данные функции1 приведены следующим образом.
1 2 3 4 5 6 7 8 9 10
В следующем примере показано, как циклировать по диапазону с пропуском 2, который включает каждый другой элемент диапазона.
let function2() =
for i in 1 .. 2 .. 10 do
printf "%d " i
printfn ""
function2()
Выходные function2
данные приведены следующим образом.
1 3 5 7 9
В следующем примере показано, как использовать диапазон символов.
let function3() =
for c in 'a' .. 'z' do
printf "%c " c
printfn ""
function3()
Выходные function3
данные приведены следующим образом.
a b c d e f g h i j k l m n o p q r s t u v w x y z
В следующем примере показано, как использовать отрицательное значение пропуска для обратной итерации.
let function4() =
for i in 10 .. -1 .. 1 do
printf "%d " i
printfn " ... Lift off!"
function4()
Выходные function4
данные приведены следующим образом.
10 9 8 7 6 5 4 3 2 1 ... Lift off!
Начало и конец диапазона также могут быть выражениями, такими как функции, как в следующем коде.
let beginning x y = x - 2*y
let ending x y = x + 2*y
let function5 x y =
for i in (beginning x y) .. (ending x y) do
printf "%d " i
printfn ""
function5 10 4
Выходные function5
данные с данными входными данными приведены ниже.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
В следующем примере показано использование дикого символа карта (_), если элемент не нужен в цикле.
let mutable count = 0
for _ in list1 do
count <- count + 1
printfn "Number of elements in list1: %d" count
Выходные данные выглядят следующим образом.
Number of elements in list1: 5
Note
Вы можете использовать for...in
в выражениях последовательности и других вычислительных выражениях, в этом случае используется настраиваемая версия for...in
выражения. Дополнительные сведения см. в разделе "Последовательности", "Асинхронные выражения", "Выражения задач" и "Вычисления".