迴圈:for...in 運算式

此迴圈建構用來逐一查看可列舉集合中的模式比對,例如範圍運算式、序列、清單、陣列,或其他支援列舉的建構。

語法

for pattern in enumerable-expression do
    body-expression

備註

for...in 運算式可與其他 .NET 語言中的 for each 陳述式進行比較,因為它會循環處理可列舉集合中的值。 不過,for...in 也支援對集合進行模式比對,而不只是逐一查看整個集合。

可列舉運算式可指定為可列舉集合,或可藉由使用 .. 運算子。 可列舉集合包括清單、序列、陣列、集合、對應等等。 任何實作 System.Collections.IEnumerable 的型別都可以使用。

當您使用 .. 運算子來表示範圍時,可以使用下列語法。

start .. finish

您也可以使用包含增量 (名為 skip) 的版本,如下列程式碼所示。

start .. skip .. finish

如果未指定 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

下列範例說明如何循環處理序列,以及如何使用 Tuple 模式,而不是簡單的變數。

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

下列範例說明如何循環處理 skip 為 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

下列範例說明如何對反向反覆項目使用負數 skip 值。

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

Note 您可以在序列運算式和其他計算運算式中使用 for...in,屆時將會使用自訂版本的 for...in 運算式。 如需詳細資訊,請參閱序列非同步運算式工作運算式計算運算式

另請參閱