Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Эта конструкция циклического цикла используется для итерации совпадений шаблона в перечисленной коллекции, такой как выражение диапазона, последовательность, список, массив или другая конструкция, поддерживающая перечисление.
Синтаксис
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
В следующем примере показано, как циклировать по последовательности и как использовать шаблон кортежа вместо простой переменной. В этом примере выражение последовательности использует -> оператор, который является сокращенным для do yield выражений последовательности и других вычислительных выражений. Оператор -> позволяет указать выражение, значение которого становится частью последовательности. Дополнительные сведения см. в разделе "Последовательности " и "Выражения вычислений".
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 выражения. Дополнительные сведения см. в разделе "Последовательности", "Асинхронные выражения", "Выражения задач" и "Вычисления".