Hurkok: a... kifejezésben
Ez a hurkoló szerkezet egy számba vett gyűjtemény mintáinak egyezései, például tartománykifejezések, sorozatok, lista, tömb vagy más, az enumerálást támogató szerkezetek közötti iterálásra szolgál.
Syntax
for pattern in enumerable-expression do
body-expression
Megjegyzések
A for...in
kifejezés összehasonlítható más for each
.NET-nyelvekben lévő utasításokkal, mivel egy számba vehető gyűjtemény értékeinek hurkolására szolgál. Emellett azonban támogatja a mintaegyeztetést a gyűjteményen keresztül ahelyett, for...in
hogy csak az egész gyűjteményre vonatkozó iterációt használták volna.
A számba vehető kifejezés megadható számba vehető gyűjteményként vagy az ..
operátor használatával. Számos gyűjtemény tartalmaz listákat, sorozatokat, tömböket, készleteket, térképeket stb. Bármilyen implementálási System.Collections.IEnumerable
típus használható.
Ha egy tartományt az ..
operátorral fejez ki, az alábbi szintaxist használhatja.
start .. Befejezni
Használhat olyan verziót is, amely tartalmazza a kihagyás nevű növekményt, ahogyan az alábbi kódban is látható.
start .. kihagyja a .. Befejezni
Ha a kihagyás értéke nincs meghatározva, akkor a gyűjteményben létrehozott következő érték 1-gyel növekszik. Ha a kihagyás meg van adva, az érték növekszik.
A mintában egyeztetett értékek a törzskifejezésben is használhatók.
Az alábbi példakódok a kifejezés használatát szemléltetik for...in
.
// Looping over a list.
let list1 = [ 1; 5; 100; 450; 788 ]
for i in list1 do
printfn "%d" i
A kimenet a következő.
1
5
100
450
788
Az alábbi példa bemutatja, hogyan hurkolhat egy szekvencia felett, és hogyan használhat egyszerű változó helyett egy rekordmintát.
let seq1 = seq { for i in 1 .. 10 -> (i, i*i) }
for (a, asqr) in seq1 do
printfn "%d squared is %d" a asqr
A kimenet a következő.
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
Az alábbi példa bemutatja, hogyan hurkolhat egy egyszerű egész számtartományon.
let function1() =
for i in 1 .. 10 do
printf "%d " i
printfn ""
function1()
Az 1. függvény kimenete a következő.
1 2 3 4 5 6 7 8 9 10
Az alábbi példa bemutatja, hogyan lehet 2-es kihagyással átcsukni egy tartományt, amely a tartomány minden más elemét tartalmazza.
let function2() =
for i in 1 .. 2 .. 10 do
printf "%d " i
printfn ""
function2()
A kimenet a function2
következő.
1 3 5 7 9
Az alábbi példa egy karaktertartomány használatát mutatja be.
let function3() =
for c in 'a' .. 'z' do
printf "%c " c
printfn ""
function3()
A kimenet a function3
következő.
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
Az alábbi példa bemutatja, hogyan használhat negatív kihagyási értéket fordított iterációhoz.
let function4() =
for i in 10 .. -1 .. 1 do
printf "%d " i
printfn " ... Lift off!"
function4()
A kimenet a function4
következő.
10 9 8 7 6 5 4 3 2 1 ... Lift off!
A tartomány elején és végén is lehetnek kifejezések, például függvények, mint az alábbi kódban.
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
Ennek a bemenetnek a kimenete function5
a következő.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
A következő példa egy helyettesítő karakter (_) használatát mutatja be, ha az elemre nincs szükség a hurokban.
let mutable count = 0
for _ in list1 do
count <- count + 1
printfn "Number of elements in list1: %d" count
A kimenet a következő.
Number of elements in list1: 5
Note
Szekvenciakifejezésekben és más számítási kifejezésekben is használható for...in
, ebben az esetben a for...in
kifejezés testreszabott verzióját használja a rendszer. További információ: Szekvenciák, aszinkron kifejezések, feladatkifejezések és számítási kifejezések.