ループ: for...in 式Loops: for...in Expression

このループ構造は、列挙可能なコレクション内のパターンの一致を反復処理するために使用されます。たとえば、範囲式、シーケンス、リスト、配列、または列挙をサポートするその他の構造体です。This looping construct is used to iterate over the matches of a pattern in an enumerable collection such as a range expression, sequence, list, array, or other construct that supports enumeration.

構文Syntax

for pattern in enumerable-expression do
    body-expression

コメントRemarks

式は、他の .net 言語for eachのステートメントと比較できます。これは、列挙可能なコレクションの値をループ処理するために使用されるためです。 for...inThe for...in expression can be compared to the for each statement in other .NET languages because it is used to loop over the values in an enumerable collection. ただし、 for...inでは、コレクション全体に対して反復処理を行うのではなく、コレクションに対するパターンマッチングもサポートしています。However, for...in also supports pattern matching over the collection instead of just iteration over the whole collection.

列挙可能な式は、整数型の範囲として、列挙..可能なコレクションとして指定することも、演算子を使用して指定することもできます。The enumerable expression can be specified as an enumerable collection or, by using the .. operator, as a range on an integral type. 列挙可能なコレクションには、リスト、シーケンス、配列、セット、マップなどがあります。Enumerable collections include lists, sequences, arrays, sets, maps, and so on. を実装System.Collections.IEnumerableする任意の型を使用できます。Any type that implements System.Collections.IEnumerable can be used.

..演算子を使用して範囲を表現する場合は、次の構文を使用できます。When you express a range by using the .. operator, you can use the following syntax.

開始...start .. 終わっfinish

次のコードのように、 skipと呼ばれるインクリメントを含むバージョンを使用することもできます。You can also use a version that includes an increment called the skip, as in the following code.

開始...start .. スキップ..skip .. 終わっfinish

整数の範囲と単純なカウンター変数をパターンとして使用する場合の一般的な動作は、各反復処理でカウンター変数を1ずつインクリメントすることですが、範囲に skip 値が含まれている場合は、代わりに skip 値によってカウンターがインクリメントされます。When you use integral ranges and a simple counter variable as a pattern, the typical behavior is to increment the counter variable by 1 on each iteration, but if the range includes a skip value, the counter is incremented by the skip value instead.

パターンに一致した値は、本文の式でも使用できます。Values matched in the pattern can also be used in the body expression.

次のコード例は、 for...in式の使用方法を示しています。The following code examples illustrate the use of the for...in expression.

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

出力は次のとおりです。The output is as follows.

1
5
100
450
788

次の例は、シーケンスをループ処理する方法と、単純な変数の代わりに組パターンを使用する方法を示しています。The following example shows how to loop over a sequence, and how to use a tuple pattern instead of a simple variable.

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

出力は次のとおりです。The output is as follows.

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

次の例は、単純な整数範囲をループ処理する方法を示しています。The following example shows how to loop over a simple integer range.

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

Function1 の出力は次のようになります。The output of function1 is as follows.

1 2 3 4 5 6 7 8 9 10

次の例では、範囲の他のすべての要素を含む、skip が2の範囲をループ処理する方法を示します。The following example shows how to loop over a range with a skip of 2, which includes every other element of the range.

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

の出力はfunction2次のとおりです。The output of function2 is as follows.

1 3 5 7 9

文字範囲を使用する方法を次の例に示します。The following example shows how to use a character range.

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

の出力はfunction3次のとおりです。The output of function3 is as follows.

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

次の例では、逆の反復処理で負の skip 値を使用する方法を示します。The following example shows how to use a negative skip value for a reverse iteration.

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

の出力はfunction4次のとおりです。The output of function4 is as follows.

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

次のコードのように、範囲の先頭と末尾には、関数などの式を指定することもできます。The beginning and ending of the range can also be expressions, such as functions, as in the following code.

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よるの出力は次のとおりです。The output of function5 with this input is as follows.

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

次の例は、ループで要素が不要な_場合に、ワイルドカード文字 () を使用する方法を示しています。The next example shows the use of a wildcard character (_) when the element is not needed in the loop.

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

出力は次のとおりです。The output is as follows.

Number of elements in list1: 5

Noteは、シーケンスfor...in式やその他のコンピュテーション式で使用できます。その場合は、 for...in式のカスタマイズされたバージョンが使用されます。Note You can use for...in in sequence expressions and other computation expressions, in which case a customized version of the for...in expression is used. 詳細については、「シーケンス非同期ワークフロー、およびコンピュテーション式」を参照してください。For more information, see Sequences, Asynchronous Workflows, and Computation Expressions.

関連項目See also