Bucles: expresión for...in
Esta construcción de bucle se usa para recorrer en iteración las coincidencias de un patrón en una colección enumerable, como una expresión de intervalo, una secuencia, una lista, una matriz u otra construcción que admita la enumeración.
Sintaxis
for pattern in enumerable-expression do
body-expression
Comentarios
La expresión se puede comparar con la instrucción en otros lenguajes .NET porque se usa para recorrer en bucle los for...in valores de una colección for each enumerable. Sin embargo, for...in también admite la coincidencia de patrones en la colección en lugar de simplemente iteración en toda la colección.
La expresión enumerable se puede especificar como una colección enumerable o, mediante el operador , como un .. intervalo en un tipo entero. Las colecciones enumerables incluyen listas, secuencias, matrices, conjuntos, mapas, y así sucesivamente. Se puede usar cualquier System.Collections.IEnumerable tipo que implemente .
Al expresar un intervalo mediante el .. operador , puede usar la sintaxis siguiente.
inicie . Terminar
También puede usar una versión que incluya un incremento denominado skip, como en el código siguiente.
inicie . omita .. Terminar
Cuando se usan intervalos enteros y una variable de contador simple como patrón, el comportamiento típico es incrementar la variable de contador en 1 en cada iteración, pero si el intervalo incluye un valor skip, el contador se incrementa por el valor skip en su lugar.
Los valores coincidentes en el patrón también se pueden usar en la expresión de cuerpo.
En los ejemplos de código siguientes se muestra el uso de la for...in expresión .
// Looping over a list.
let list1 = [ 1; 5; 100; 450; 788 ]
for i in list1 do
printfn "%d" i
La salida es la siguiente.
1
5
100
450
788
En el ejemplo siguiente se muestra cómo recorrer en bucle una secuencia y cómo usar un patrón de tupla en lugar de una variable simple.
let seq1 = seq { for i in 1 .. 10 -> (i, i*i) }
for (a, asqr) in seq1 do
printfn "%d squared is %d" a asqr
La salida es la siguiente.
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
En el ejemplo siguiente se muestra cómo recorrer en bucle un intervalo entero simple.
let function1() =
for i in 1 .. 10 do
printf "%d " i
printfn ""
function1()
La salida de function1 es la siguiente.
1 2 3 4 5 6 7 8 9 10
En el ejemplo siguiente se muestra cómo recorrer en bucle un intervalo con una skip de 2, que incluye todos los demás elementos del intervalo.
let function2() =
for i in 1 .. 2 .. 10 do
printf "%d " i
printfn ""
function2()
La salida de function2 es la siguiente.
1 3 5 7 9
En el ejemplo siguiente se muestra cómo usar un intervalo de caracteres.
let function3() =
for c in 'a' .. 'z' do
printf "%c " c
printfn ""
function3()
La salida de function3 es la siguiente.
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
En el ejemplo siguiente se muestra cómo usar un valor de skip negativo para una iteración inversa.
let function4() =
for i in 10 .. -1 .. 1 do
printf "%d " i
printfn " ... Lift off!"
function4()
La salida de function4 es la siguiente.
10 9 8 7 6 5 4 3 2 1 ... Lift off!
El principio y el final del intervalo también pueden ser expresiones, como funciones, como en el código siguiente.
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
La salida de function5 con esta entrada es la siguiente.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
En el ejemplo siguiente se muestra el uso de un carácter comodín ( ) cuando _ el elemento no es necesario en el bucle .
let mutable count = 0
for _ in list1 do
count <- count + 1
printfn "Number of elements in list1: %d" count
La salida es la siguiente.
Number of elements in list1: 5
Note Puede usar en expresiones de secuencia y otras expresiones de cálculo, en cuyo caso se usa una versión personalizada for...in for...in de la expresión. Para obtener más información, vea Secuencias, expresiones asincrónicas, expresiones de tareay expresiones de cálculo.