루프: for...in 식

이 루핑 구문은 열거형을 지원하는 범위 식, 시퀀스, 목록, 배열 또는 기타 구문과 같은 열거 가능한 컬렉션에서 패턴의 일치 항목을 반복하는 데 사용됩니다.

구문

for pattern in enumerable-expression do
    body-expression

설명

이 식은 for...in 열거 가능한 컬렉션의 for each 값을 반복하는 데 사용되므로 다른 .NET 언어의 문과 비교할 수 있습니다. 그러나 for...in 전체 컬렉션에 대해 반복하는 대신 컬렉션에 대한 패턴 일치도 지원합니다.

열거 가능한 식은 열거 가능한 컬렉션으로 지정하거나 연산자를 사용하여 .. 지정할 수 있습니다. 열거 가능한 컬렉션에는 목록, 시퀀스, 배열, 집합, 맵 등이 포함됩니다. 구현하는 모든 형식을 System.Collections.IEnumerable 사용할 수 있습니다.

연산자를 사용하여 .. 범위를 표현하는 경우 다음 구문을 사용할 수 있습니다.

.를 시작합니다 . 완료

다음 코드와 같이 skip이라는 증분을 포함하는 버전을 사용할 수도 있습니다.

.를 시작합니다 . .를 건너뜁니다 . 완료

건너뛰기 값이 지정되지 않은 경우 컬렉션에서 생성된 다음 값은 1씩 증가합니다. skip을 지정하면 해당 값이 증가합니다.

패턴과 일치하는 값은 본문 식에서도 사용할 수 있습니다.

다음 코드 예제에서는 식의 사용을 보여 줍니다 for...in .

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

출력은 다음과 같습니다.

1
5
100
450
788

다음 예제에서는 시퀀스를 반복하는 방법과 단순 변수 대신 튜플 패턴을 사용하는 방법을 보여 줍니다.

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

출력은 다음과 같습니다.

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

다음 예제에서는 단순 정수 범위를 반복하는 방법을 보여줍니다.

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

function1의 출력은 다음과 같습니다.

1 2 3 4 5 6 7 8 9 10

다음 예제에서는 범위의 다른 모든 요소를 포함하는 2의 건너뛰기를 사용하여 범위를 반복하는 방법을 보여 있습니다.

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

출력 function2 은 다음과 같습니다.

1 3 5 7 9

다음 예제에서는 문자 범위를 사용하는 방법을 보여줍니다.

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

출력 function3 은 다음과 같습니다.

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

다음 예제에서는 역방향 반복에 음수 건너뛰기 값을 사용하는 방법을 보여 있습니다.

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

출력 function4 은 다음과 같습니다.

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

범위의 시작과 끝은 다음 코드와 같이 함수와 같은 식일 수도 있습니다.

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

이 입력의 function5 출력은 다음과 같습니다.

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

다음 예제에서는 루프에 요소가 필요하지 않은 경우 wild카드 문자(_)를 사용하는 방법을 보여 줍니다.

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

출력은 다음과 같습니다.

Number of elements in list1: 5

Note 시퀀스 식 및 기타 계산 식에서 사용할 for...in 수 있습니다. 이 경우 사용자 지정된 버전의 for...in 식이 사용됩니다. 자세한 내용은 시퀀스, 비동기 식, 작업 식 및 계산 식을 참조하세요.

참고 항목