Sdílet prostřednictvím


Smyčky: Výraz for...in

Tento konstruktor smyčky se používá k iteraci shod vzoru v výčtové kolekci, jako je výraz rozsahu, sekvence, seznam, pole nebo jiný konstruktor, který podporuje výčet.

Syntaxe

for pattern in enumerable-expression do
    body-expression

Poznámky

Výraz for...in lze porovnat s příkazem for each v jiných jazycích .NET, protože se používá ke smyčce hodnot v výčtové kolekci. for...in Podporuje ale také porovnávání vzorů v kolekci místo pouhé iterace celé kolekce.

Výraz s možností výčtu lze zadat jako výčtovou kolekci nebo pomocí operátoru .. . Mezi výčtové kolekce patří seznamy, sekvence, pole, sady, mapy atd. Lze použít libovolný typ, který implementuje System.Collections.IEnumerable .

Při vyjádření rozsahu pomocí operátoru .. můžete použít následující syntaxi.

spusťte .. Dokončit

Můžete také použít verzi, která zahrnuje přírůstek označovaný jako přeskočit, jako v následujícím kódu.

spusťte .. přeskočit .. Dokončit

Pokud není zadaná hodnota přeskočení, další hodnota vygenerovaná v kolekci se zvýší o 1. Pokud je zadáno přeskočení, zvýší se o tuto hodnotu.

Hodnoty, které odpovídají vzoru, lze také použít v základním výrazu.

Následující příklady kódu ilustrují použití výrazu for...in .

// Looping over a list.
let list1 = [ 1; 5; 100; 450; 788 ]
for i in list1 do
   printfn "%d" i

Výstup je následující.

1
5
100
450
788

Následující příklad ukazuje, jak opakovat sekvenci a jak místo jednoduché proměnné použít vzor řazené kolekce členů.

let seq1 = seq { for i in 1 .. 10 -> (i, i*i) }
for (a, asqr) in seq1 do
  printfn "%d squared is %d" a asqr

Výstup je následující.

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

Následující příklad ukazuje, jak smyčce přes jednoduchý celočíselnou oblast.

let function1() =
  for i in 1 .. 10 do
    printf "%d " i
  printfn ""
function1()

Výstup funkce1 je následující.

1 2 3 4 5 6 7 8 9 10

Následující příklad ukazuje, jak přemístit rozsah s přeskočením 2, který zahrnuje všechny ostatní prvky rozsahu.

let function2() =
  for i in 1 .. 2 .. 10 do
     printf "%d " i
  printfn ""
function2()

Výstup function2 je následující.

1 3 5 7 9

Následující příklad ukazuje, jak používat rozsah znaků.

let function3() =
  for c in 'a' .. 'z' do
    printf "%c " c
  printfn ""
function3()

Výstup function3 je následující.

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

Následující příklad ukazuje, jak použít zápornou hodnotu přeskočení pro obrácenou iteraci.

let function4() =
    for i in 10 .. -1 .. 1 do
        printf "%d " i
    printfn " ... Lift off!"
function4()

Výstup function4 je následující.

10 9 8 7 6 5 4 3 2 1 ... Lift off!

Začátek a konec rozsahu mohou být také výrazy, jako jsou funkce, jako je následující kód.

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

Výstup function5 tohoto vstupu je následující.

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Následující příklad ukazuje použití zástupného znaku (_), pokud prvek není ve smyčce potřeba.

let mutable count = 0
for _ in list1 do
   count <- count + 1
printfn "Number of elements in list1: %d" count

Výstup je následující.

Number of elements in list1: 5

Note Můžete použít for...in v sekvenčních výrazech a dalších výpočetních výrazech, v takovém případě se používá přizpůsobená verze výrazu for...in . Další informace najdete v tématu Sekvence, asynchronní výrazy, výrazy úloh a výpočetní výrazy.

Viz také