Compartir a través de


Bucles: para... en expresión

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

Observaciones

La for...in expresión se puede comparar con la for each instrucción en otros lenguajes .NET porque se usa para recorrer en bucle los valores de una colección 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 . Las colecciones enumerables incluyen listas, secuencias, matrices, conjuntos, mapas, etc. Se puede usar cualquier tipo que implemente System.Collections.IEnumerable .

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 .. omitir .. terminar

Si el valor skip no está especificado, el siguiente valor generado en la colección se incrementa en 1. Cuando se especifica skip, se incrementa por ese valor.

Los valores coincidentes en el patrón también se pueden usar en la expresión body.

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. En este ejemplo, la expresión de secuencia usa el -> operador , que es una abreviatura de do yield en expresiones de secuencia y otras expresiones de cálculo. El -> operador permite especificar una expresión cuyo valor se convierte en parte de la secuencia. Para obtener más información, vea Secuencias y expresiones de cálculo.

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 un intervalo con un salto 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 omisión 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 for...in en expresiones de secuencia y otras expresiones de cálculo, en cuyo caso se usa una versión personalizada de la for...in expresión. Para obtener más información, vea Secuencias, expresiones asincrónicas, expresiones de tarea y expresiones de cálculo.

Consulte también