Compartir a través de


Bucles: expresión for...in (F#)

Esta construcción de bucle se utiliza para iterar por 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.

for pattern in enumerable-expression do
   body-expression

Comentarios

La expresión for…in es comparable a la instrucción for each de otros lenguajes .NET, ya que se utiliza para iterar por los valores de una colección enumerable. Sin embargo, for…in también permite detectar patrones en la colección y no solo la iteración por toda la colección.

La expresión enumerable se puede especificar como una colección enumerable o, mediante el operador .., como un intervalo de valores de tipo entero. Las colecciones enumerables incluyen listas, secuencias, matrices, conjuntos, asignaciones, etc. Se puede utilizar cualquier tipo que implemente IEnumerable.

Al expresar un intervalo mediante el operador .., se puede usar la sintaxis siguiente.

start .. finish

Asimismo, se puede usar una versión que incluye un incremento denominado salto, como en el código siguiente.

start .. skip .. finish

Cuando se usan intervalos de enteros y una variable de contador simple como patrón, la variable de contador se incrementa normalmente en una unidad con cada iteración, pero si el intervalo incluye un valor de salto, el contador se incrementará en dicho valor.

Los valores coincidentes del patrón también se pueden utilizar en la expresión del cuerpo.

En los ejemplos de código siguientes se muestra el uso de la expresión for...in.

// 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 de enteros 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 el valor de salto 2. Se incluye uno de cada dos 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 salto 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, tal y como se muestra 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 no se necesita el elemento 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

Nota: se puede utilizar for...in en expresiones de secuencia y otras expresiones de cálculo, en cuyo caso se utiliza una versión personalizada de la expresión for...in. Para obtener más información, vea Secuencias (F#), Flujos de trabajo asincrónicos (F#) y Expresiones de cálculo (F#).

Vea también

Referencia

Bucles: expresión for...to (F#)

Bucles: expresión while...do (F#)

Otros recursos

Referencia del lenguaje F#