Megosztás a következőn keresztül:


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.

Lásd még