루프: for...in 식(F#)
이 루프 구문은 열거형을 지원하는 구문을 비롯하여 범위 식, 시퀀스, 목록 또는 배열 등의 열거 가능한 컬렉션에서 패턴에 일치하는 항목에 대해 작업을 반복하는 데 사용됩니다.
for pattern in enumerable-expression do
body-expression
설명
for…in 식은 열거 가능한 컬렉션의 값을 반복하는 데 사용되므로 다른 .NET 언어의 for each 문에 비견될 수 있습니다. 그러나 for…in 식은 전체 컬렉션을 단순히 반복하는 데 그치지 않고 컬렉션에 대한 패턴 일치도 지원합니다.
열거 가능한 식을 열거 가능한 컬렉션으로 지정하거나 .. 연산자를 사용하여 정수 형식에 대한 범위로 지정할 수 있습니다. 열거 가능한 컬렉션에는 목록, 시퀀스, 배열, 집합, 맵 등이 있습니다. IEnumerable을 구현하는 형식이면 무엇이든 사용할 수 있습니다.
.. 연산자를 사용하여 범위를 표현할 때는 다음 구문을 사용할 수 있습니다.
start .. finish
다음 코드에서와 같이 건너뛰기라는 증분을 포함하는 버전도 사용할 수 있습니다.
start .. skip .. finish
정수 범위와 단순한 카운터 변수를 패턴으로 사용하는 경우 일반적인 동작은 컬렉션을 반복할 때마다 카운터 변수를 1씩 증가시키는 것이지만 범위에 건너뛰기 값이 포함되어 있으면 카운터가 1씩 증가하지 않고 건너뛰기 값만큼씩 증가합니다.
패턴에 일치하는 값을 본문 식에 사용할 수도 있습니다.
다음 코드 예제에서는 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
다음 예제에서는 요소가 루프에 필요하지 않은 경우 와일드카드 문자(_)를 사용하는 방법을 보여 줍니다.
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
참고 시퀀스 식 및 기타 계산 식에 for...in을 사용할 수 있습니다. 이 경우 사용자 지정된 버전의 for...in 식이 사용됩니다. 자세한 내용은 시퀀스(F#), 비동기 워크플로(F#) 및 계산 식(F#)을 참조하십시오.