這個迴圈建構可用來逐一查看可列舉集合中模式的相符專案,例如範圍表達式、序列、清單、陣列或其他支援列舉的建構。
語法
for pattern in enumerable-expression do
body-expression
備註
表達式 for...in 可以與其他 .NET 語言中的 語句進行比較 for each ,因為它可用來迴圈查看可列舉集合中的值。 不過, for...in 也支援透過集合比對模式,而不只是在整個集合上反覆執行。
可列舉表達式可以指定為可列舉集合, .. 或使用 運算符。 可列舉的集合包括清單、序列、陣列、集合、對應等等。 任何實作 System.Collections.IEnumerable 的型別都可以使用。
當您使用 .. 運算符來表示範圍時,可以使用下列語法。
啟動 .. finish
您也可以使用包含稱為 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 模式,而不是簡單的變數。 在此範例中,序列運算式使用 -> 運算子,這是序列運算式和其他計算運算式的 do yield 簡寫。 運算 -> 子可讓您指定其值成為序列一部分的運算式。 如需詳細資訊,請參閱 序列 和 計算運算式。
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 的 skip 在範圍上迴圈,其中包含範圍的其他每個元素。
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
Note 您可以在時序表示式和其他計算運算式中使用 for...in ,在此情況下會使用自定義版本的 for...in 表達式。 如需詳細資訊,請參閱 時序、 異步運算式、 工作運算式和 計算運算式。