Döngüler: for...in İfadesi
Bu döngü yapısı; aralık ifadesi, dizi, liste, dizi veya sabit listesini destekleyen diğer yapı gibi numaralanabilir bir koleksiyonda bir desenin eşleşmelerini tekrarlamak için kullanılır.
Syntax
for pattern in enumerable-expression do
body-expression
Açıklamalar
İfade diğer .NET dillerinde deyimiyle karşılaştırılabilir çünkü numaralanabilir bir koleksiyonda değerler üzerinde döngü for...in for each yapmak için kullanılır. Ancak, for...in tüm koleksiyon üzerinde yineleme yerine koleksiyon üzerinde desen eşleştirmeyi de destekler.
Numaralanabilir ifade, numaralanabilir bir koleksiyon olarak veya işleci kullanılarak, integral .. türünde bir aralık olarak belirtilebilir. Listelenebilir koleksiyonlar listeler, diziler, diziler, kümeler, haritalar gibi öğeleri içerir. Uygulayan herhangi System.Collections.IEnumerable bir tür kullanılabilir.
bir aralığı işleci kullanarak ifade .. etmek için aşağıdaki söz dizimlerini kullanabilirsiniz.
'i başlatma. Bitirmek
Aşağıdaki kodda olduğu gibi skip adlı bir artış içeren bir sürüm de kullanabilirsiniz.
'i başlatma. atla. Bitirmek
Tamsayı aralıkları ve basit bir sayaç değişkenini desen olarak kullanırsanız, tipik davranış her yinelemede sayaç değişkenini 1 artırmadır, ancak aralık bir atlama değeri içerirse sayaç, atlama değeriyle artırılır.
Desende eş değerlerle eşleşmesi gövde ifadesinde de kullanılabilir.
Aşağıdaki kod örnekleri ifadenin kullanımını for...in göstermektedir.
// 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ü ve basit bir değişken yerine tanımlama düzeni kullanma adımları ve açık bir şekilde açık bir şekilde açık ve açık bir şekilde açık bir şekilde açık ve net bir şekilde açık bir şekilde ifade etmek için aşağıdaki örnekte bir dizi üzerinde döngü gerçekleştirin.
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 örnekte, basit bir tamsayı aralığı üzerinde nasıl döngü gerçekleştirin?
let function1() =
for i in 1 .. 10 do
printf "%d " i
printfn ""
function1()
İşlev1'in çıktısı aşağıdaki gibidir.
1 2 3 4 5 6 7 8 9 10
Aşağıdaki örnek, aralığın diğer tüm öğesini içeren 2 atlamalı bir aralık üzerinde nasıl döngü gerçekleştirebilirsiniz?
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 bir karakter aralığının nasıl kullanımına sahip olduğu gösterir.
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 örnek, bir ters yineleme için negatif atlama değerinin nasıl kullanıla bir gösterir.
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 bitişi, 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 function5 girişle çıktısı aşağıdaki gibidir.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Sonraki örnek, öğe döngüde gerekli değilken joker karakter ( _ ) kullanımını gösterir.
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; bu durumda for...in ifadenin özelleştirilmiş for...in bir sürümü kullanılır. Daha fazla bilgi için bkz. Diziler, Zaman uyumsuz ifadeler, Görev ifadelerive Hesaplama İfadeleri.