迴圈:for...in 運算式 (F#)
這個迴圈建構用於逐一查看可列舉的集合 (例如範圍運算式、序列、清單、陣列或其他支援列舉的建構) 中符合模式的項目。
for pattern in enumerable-expression do
body-expression
備註
for…in 運算式好比其他 .NET 語言中的 for each 陳述式,可用來對可列舉集合中的值執行迴圈。不過,for…in 也支援對集合執行模式比對,而不只是逐一查看整個集合。
可列舉的運算式可以指定為可列舉的集合 (Collection),或透過 .. 運算子指定為整數型別的範圍。可列舉的集合 (Collection) 包含清單、序列、陣列、集合 (Set)、對應等等。任何實作 IEnumerable 的型別都可以使用。
當您使用 .. 運算子表示範圍時,可以使用下列語法。
start ..finish
您也可以使用包含增量 (稱為 skip) 的版本,如下列程式碼所示。
start ..skip ..finish
當您使用整數範圍和簡單的計數器變數做為模式時,一般行為是每次反覆運算都會以 1 遞增計數器變數,但是如果範圍包含 skip 值,計數器便會以 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
附註:您可以在序列運算式和其他計算運算式中使用 for...in,在此情況下,會使用自訂 for...in 版本的運算式。如需詳細資訊,請參閱 序列 (F#)、非同步工作流程 (F#)和計算運算式 (F#)。