Döngüler: for...in İfadesi
Bu döngü oluşturma yapısı, aralık ifadesi, sıra, liste, dizi veya numaralandırmayı destekleyen başka bir yapı gibi numaralandırılabilir bir koleksiyondaki bir desenin eşleşmelerini yinelemek için kullanılır.
Sözdizimi
for pattern in enumerable-expression do
body-expression
Açıklamalar
İfade for...in
, numaralandırılabilir bir koleksiyondaki değerler üzerinde döngü yapmak için kullanıldığından diğer .NET dillerindeki deyimiyle karşılaştırılabilir for each
. Ancak, for...in
yalnızca koleksiyonun tamamı üzerinde yineleme yerine koleksiyon üzerinde desen eşleştirmeyi de destekler.
Numaralandırılabilir ifade, numaralandırılabilir bir koleksiyon olarak veya işleci kullanılarak ..
belirtilebilir. Numaralandırılabilir koleksiyonlar listeler, diziler, diziler, kümeler, haritalar vb. içerir. Uygulayan System.Collections.IEnumerable
herhangi bir tür kullanılabilir.
işlecini ..
kullanarak bir aralığı ifade ettiğinizde, aşağıdaki söz dizimini kullanabilirsiniz.
başlat .. Bitirmek
Aşağıdaki kodda olduğu gibi skip adlı bir artım içeren bir sürüm de kullanabilirsiniz.
başlat .. atla .. Bitirmek
Atlama değeri belirtilmezse, koleksiyonda oluşturulan sonraki değer 1 artırılır. Atlama belirtildiğinde, bu değer artırılır.
Desende eşleşen değerler gövde ifadesinde de kullanılabilir.
Aşağıdaki kod örnekleri ifadenin for...in
kullanımını gösterir.
// Looping over a list.
let list1 = [ 1; 5; 100; 450; 788 ]
for i in list1 do
printfn "%d" i
Çıktı aşağıdaki gibidir:
1
5
100
450
788
Aşağıdaki örnekte bir dizi üzerinde döngü yapma ve basit bir değişken yerine tanımlama grubu deseninin nasıl kullanılacağı gösterilmektedir.
let seq1 = seq { for i in 1 .. 10 -> (i, i*i) }
for (a, asqr) in seq1 do
printfn "%d squared is %d" a asqr
Çıktı aşağıdaki gibidir:
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
Aşağıdaki örnek, basit bir tamsayı aralığı üzerinde döngü yapmayı gösterir.
let function1() =
for i in 1 .. 10 do
printf "%d " i
printfn ""
function1()
İşlev1'in çıkışı aşağıdaki gibidir.
1 2 3 4 5 6 7 8 9 10
Aşağıdaki örnekte, aralığın diğer tüm öğelerini içeren 2 atlamalı bir aralığın nasıl döngüye alındığı gösterilmektedir.
let function2() =
for i in 1 .. 2 .. 10 do
printf "%d " i
printfn ""
function2()
çıktısı function2
aşağıdaki gibidir.
1 3 5 7 9
Aşağıdaki örnekte karakter aralığının nasıl kullanılacağı gösterilmektedir.
let function3() =
for c in 'a' .. 'z' do
printf "%c " c
printfn ""
function3()
çıktısı function3
aşağıdaki gibidir.
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
Aşağıdaki örnekte ters yineleme için negatif atlama değerinin nasıl kullanılacağı gösterilmektedir.
let function4() =
for i in 10 .. -1 .. 1 do
printf "%d " i
printfn " ... Lift off!"
function4()
çıktısı function4
aşağıdaki gibidir.
10 9 8 7 6 5 4 3 2 1 ... Lift off!
Aralığın başlangıcı ve sonu, aşağıdaki kodda olduğu gibi işlevler gibi ifadeler de olabilir.
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
Bu girişle çıkışı function5
aşağıdaki gibidir.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Sonraki örnekte, öğe döngüde gerekli olmadığında joker karakter (_) kullanımı gösterilmektedir.
let mutable count = 0
for _ in list1 do
count <- count + 1
printfn "Number of elements in list1: %d" count
Çıktı aşağıdaki gibidir:
Number of elements in list1: 5
Note
Sıralı ifadelerde ve diğer hesaplama ifadelerinde kullanabilirsiniz for...in
; bu durumda ifadenin for...in
özelleştirilmiş bir sürümü kullanılır. Daha fazla bilgi için bkz . Sıralar, Zaman Uyumsuz ifadeler, Görev ifadeleri ve Hesaplama İfadeleri.