Compartilhar via


Loops: expressão for...in (F#)

Essa construção de loop é usada para iterar sobre as correspondências de um padrão de uma coleção enumerável, como uma expressão de intervalo, seqüência, lista, matriz ou outra construção que oferece suporte à enumeração.

for pattern in enumerable-expression do
   body-expression

Comentários

O for…in expressão pode ser comparada ao for each a instrução em outros.NET idiomas porque ele é usado para fazer um loop sobre os valores em uma coleção enumerável. No entanto, for…in também oferece suporte a padrões coincidentes na coleção em vez de apenas iteração na coleção inteira.

A expressão enumerável pode ser especificada como uma coleção enumerável ou, usando o .. operador, como um intervalo de tipo integral. Coleções enumeráveis incluem listas, seqüências, matrizes, conjuntos, mapas e assim por diante. Qualquer tipo que implemente IEnumerable pode ser usado.

Quando expressar um intervalo usando o .. operador, você pode utilizar a sintaxe a seguir.

start .. finish

Você também pode usar uma versão que inclui um incremento de chamada a Ignore, como no código a seguir.

start .. skip .. finish

Quando você usa intervalos integrais e uma variável de contador simples como um padrão, o comportamento típico é incrementar a variável de contador por 1 em cada iteração, mas se o intervalo inclui um valor de ignorar, o contador é incrementado em vez disso, o valor de ignorar.

Os valores correspondidos no padrão também podem ser usados na expressão do corpo.

Os exemplos de código a seguir ilustram o uso da for...in expressão.

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

A saída é da seguinte maneira.

1
5
100
450
788

O exemplo a seguir mostra como usar um padrão de tupla em vez de uma variável simple e como efetuar um loop em uma seqüência.

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 saída é da seguinte maneira.

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

O exemplo a seguir mostra como fazer um loop em um intervalo de inteiros simples.

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

A saída de function1 é o seguinte.

1 2 3 4 5 6 7 8 9 10

O exemplo a seguir mostra como fazer um loop através de um intervalo com um salto de 2, que inclui todos os outros elementos do intervalo.

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

A saída de function2 é o seguinte.

1 3 5 7 9

O exemplo a seguir mostra como usar um intervalo de caracteres.

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

A saída de function3 é o seguinte.

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

O exemplo a seguir mostra como usar um valor negativo de pular de uma iteração inversa.

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

A saída de function4 é o seguinte.

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

O início e o final do intervalo também podem ser expressões, como, por exemplo, funções, como no código a seguir.

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

A saída de function5 com essa entrada é o seguinte.

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

O próximo exemplo mostra o uso de um caractere curinga (_) quando o elemento não é necessária no loop.

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

A saída é da seguinte maneira.

Number of elements in list1: 5

Nota você pode usar for...in em expressões de seqüência e de outras expressões de cálculo, caso em que uma versão personalizada da for...in a expressão é usada. Para obter mais informações, consulte Sequências (F#), Fluxos de trabalho assíncronos (F#) e Expressões de computação (F#).

Consulte também

Referência

Loops: expressão for...to (F#)

Loops: expressão while...do (F#)

Outros recursos

Referência da linguagem F#