W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
序列,像列表一樣表示值的有序集合。 然而,當(dāng)需要時(shí),計(jì)算序列或序列表達(dá)式中的元素。 它們不是一次計(jì)算的,因此它們用于表示無限數(shù)據(jù)結(jié)構(gòu)。
序列使用下面的語法定義
seq { expr }
例如,
let seq1 = seq { 1 .. 10 }
與列表類似,您可以使用范圍和推導(dǎo)來創(chuàng)建序列。
序列表達(dá)式可以用于創(chuàng)建順序?qū)懭氡磉_(dá)式。能做到這些 -
下面的例子演示概念
(* Sequences *) let seq1 = seq { 1 .. 10 } (* ascending order and increment*) printfn "The Sequence: %A" seq1 let seq2 = seq { 1 .. 5 .. 50 } (* descending order and decrement*) printfn "The Sequence: %A" seq2 let seq3 = seq {50 .. -5 .. 0} printfn "The Sequence: %A" seq3 (* using yield *) let seq4 = seq { for a in 1 .. 10 do yield a, a*a, a*a*a } printfn "The Sequence: %A" seq4
當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出
The Sequence: seq [1; 2; 3; 4; ...] The Sequence: seq [1; 6; 11; 16; ...] The Sequence: seq [50; 45; 40; 35; ...] The Sequence: seq [(1, 1, 1); (2, 4, 8); (3, 9, 27); (4, 16, 64); ...]
以下程序打印從1到50的素?cái)?shù)
(* Recursive isprime function. *) let isprime n = let rec check i = i > n/2 || (n % i <> 0 && check (i + 1)) check 2 let primeIn50 = seq { for n in 1..50 do if isprime n then yield n } for x in primeIn50 do printfn "%d" x
當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出
1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
下表顯示了對(duì)序列數(shù)據(jù)類型的基本操作
值 | 描述 |
---|---|
append : seq<'T> → seq<'T> → seq<'T> | 封裝了兩個(gè)給定枚舉作為單一串聯(lián)枚舉。 |
average : seq<^T> → ^T | 返回序列中的元素的平均值。 |
averageBy : ('T → ^U) → seq<'T> → ^U | 返回由將所述函數(shù)應(yīng)用于所述序列中的每個(gè)元件產(chǎn)生的結(jié)果的平均值。 |
cache : seq<'T> → seq<'T> | 返回對(duì)應(yīng)于輸入序列的高速緩存版本的序列。 |
cast : IEnumerable → seq<'T> | 包裝松散類型的系統(tǒng)。集合序列作為輸入序列。 |
choose : ('T → 'U option) → seq<'T> → seq<'U> | 將給定的函數(shù)應(yīng)用于列表的每個(gè)元素。 返回由函數(shù)returns Some的每個(gè)元素的結(jié)果組成的列表。 |
collect : ('T → 'Collection) → seq<'T> → seq<'U> | 應(yīng)用于給定的功能,該序列中的每個(gè)元素和并置的所有結(jié)果。 |
compareWith : ('T → 'T → int) → seq<'T> → seq<'T> → int | 比較使用給定比較函數(shù),元件由元件兩個(gè)序列。 |
concat : seq<'Collection> → seq<'T> | 結(jié)合給定的枚舉-的-枚舉作為單一串聯(lián)枚舉。 |
countBy : ('T → 'Key) → seq<'T> → seq<'Key * int> | 施加產(chǎn)生關(guān)鍵功能的序列中的每個(gè)元素,并返回產(chǎn)生獨(dú)特鍵和它們?cè)瓉淼捻樞虺霈F(xiàn)次數(shù)的順序。 |
delay : (unit → seq<'T>) → seq<'T> | 返回從一個(gè)序列的給定延遲規(guī)范構(gòu)建的序列。 |
distinct : seq<'T> → seq<'T> | 返回包含根據(jù)上的條目通用散列和平等的比較沒有重復(fù)的條目順序。如果序列中多次出現(xiàn)的元件則以后出現(xiàn)被丟棄。 |
distinctBy : ('T → 'Key) → seq<'T> → seq<'T> | 返回包含根據(jù)對(duì)給定生成鍵返回功能鍵通用散列和平等的比較沒有重復(fù)的條目順序。如果序列中多次出現(xiàn)的元件則以后出現(xiàn)被丟棄。 |
empty : seq<'T> | 創(chuàng)建一個(gè)空的序列。 |
exactlyOne : seq<'T> → 'T | 返回序列的唯一元素。 |
exists : ('T → bool) → seq<'T> → bool | 如果序列中的任何元素滿足給定謂詞測(cè)試。 |
exists2 : ('T1 → 'T2 → bool) → seq<'T1> → seq<'T2> → bool | 測(cè)試如果任何一對(duì)輸入序列的相應(yīng)元件的滿足給定謂詞。 |
filter : ('T → bool) → seq<'T> → seq<'T> | 返回包含只對(duì)給定的謂詞返回true的集合中的元素一個(gè)新的集合。 |
find : ('T → bool) → seq<'T> → 'T | 返回該給定函數(shù)返回true的第一個(gè)元素。 |
findIndex : ('T → bool) → seq<'T> → int | 返回該給定函數(shù)返回true的第一個(gè)元素的索引。 |
fold : ('State → 'T → 'State) → 'State → seq<'T> → 'State | 應(yīng)用一個(gè)函數(shù)集合中的每個(gè)元素,穿線通過計(jì)算一個(gè)累加器參數(shù)。如果輸入函數(shù)是f和元素I0 ...中,則該函數(shù)計(jì)算F(...(FS I0)...)中。 |
forall : ('T → bool) → seq<'T> → bool | 如果測(cè)試序列的所有元素滿足給定謂詞。 |
forall2 : ('T1 → 'T2 → bool) → seq<'T1> → seq<'T2> → bool | 測(cè)試的所有對(duì)從兩個(gè)序列繪制元件的滿足給定的謂詞。如果一個(gè)序列比另一個(gè)短則較長序列的其余元素將被忽略。 |
groupBy : ('T → 'Key) → seq<'T> → seq<'Key * seq<'T>> | 施加產(chǎn)生關(guān)鍵功能的序列中的每個(gè)元素,并產(chǎn)生唯一鍵的一個(gè)序列。每個(gè)獨(dú)特的項(xiàng)也已包含匹配該鍵,所有元素的序列。 |
head : seq<'T> → 'T | 返回序列的第一個(gè)元素。 |
init : int → (int → 'T) → seq<'T> | 生成一個(gè)新的序列,迭代時(shí),通過調(diào)用給定函數(shù),直到給定的計(jì)數(shù)返回連續(xù)元素。調(diào)用函數(shù)的結(jié)果不被保存,即,功能被重新施加必要重新生成的元素。所述函數(shù)傳遞正在生成的項(xiàng)的索引。 |
initInfinite : (int → 'T) → seq<'T> | 生成一個(gè)新的序列,迭代的時(shí)候,會(huì)通過調(diào)用給定函數(shù)返回連續(xù)元素。調(diào)用函數(shù)的結(jié)果不被保存,即,該函數(shù)將被重新應(yīng)用在必要時(shí)重新生成的元素。所述函數(shù)傳遞正在生成的項(xiàng)的索引。 |
isEmpty : seq<'T> → bool | 測(cè)試序列是否有任何元素。 |
iter : ('T → unit) → seq<'T> → unit | 應(yīng)用于給定的功能到集合中的每個(gè)元素。 |
iter2 : ('T1 → 'T2 → unit) → seq<'T1> → seq<'T2> → unit | 適用于給定函數(shù)同時(shí)兩個(gè)集合。如果一個(gè)序列比另一個(gè)短則較長序列的其余元素將被忽略。 |
iteri : (int → 'T → unit) → seq<'T> → unit | 應(yīng)用于給定的功能到集合中的每個(gè)元素。傳遞給函數(shù)的整數(shù)表示的元素的索引。 |
last : seq<'T> → 'T | 返回序列的最后一個(gè)元素。 |
length : seq<'T> → int | 返回序列的長度。 |
map : ('T → 'U) → seq<'T> → seq<'U> | 創(chuàng)建一個(gè)新的集合的元素是施加給定函數(shù)對(duì)每個(gè)集合中的元素的結(jié)果。作為元素是使用從對(duì)象檢索統(tǒng)計(jì)員MoveNext方法所要求的給定的函數(shù)將被應(yīng)用。 |
map2 : ('T1 → 'T2 → 'U) → seq<'T1> → seq<'T2> → seq<'U> | 創(chuàng)建一個(gè)新的集合的元素是施加給定的功能,以相應(yīng)的對(duì)從兩個(gè)序列元件的結(jié)果。如果一個(gè)輸入序列比另一個(gè)短則較長序列的其余元素將被忽略。 |
mapi : (int → 'T → 'U) → seq<'T> → seq<'U> | 創(chuàng)建一個(gè)新的集合的元素是施加給定函數(shù)對(duì)每個(gè)集合中的元素的結(jié)果。傳遞給函數(shù)的整數(shù)索引表示正在轉(zhuǎn)變?cè)氐乃饕◤?開始)。 |
max : seq<'T> → 'T | 返回的最大序列的所有元素,通過使用Operators.max比較。 |
maxBy : ('T → 'U) → seq<'T> → 'T | 返回的最大序列的所有元素,通過在函數(shù)結(jié)果使用Operators.max比較。 |
min : seq<'T> → 'T | 返回最低序列的所有元素,通過使用Operators.min比較。 |
minBy:('T→'U)→SEQ <'T>→'T | 返回最低序列的所有元素,通過在函數(shù)結(jié)果使用Operators.min比較。 |
nth : int → seq<'T> → 'T | 計(jì)算集合中的第n個(gè)元素。 |
ofArray : 'T array → seq<'T> | 意見給出數(shù)組作為序列。 |
ofList : 'T list → seq<'T> | 意見給出列表作為序列。 |
pairwise : seq<'T> → seq<'T * 'T> | 返回輸入序列及其前身各要素的序列,這是只有返回作為第二元件的前身的第一個(gè)元件的異常。 |
pick : ('T → 'U option) → seq<'T> → 'U | 將給定函數(shù)應(yīng)用于連續(xù)元素,返回函數(shù)返回Somevalue的第一個(gè)值。 |
readonly : seq<'T> → seq<'T> | 創(chuàng)建一個(gè)新的序列對(duì)象委托給指定的序列對(duì)象。這確保了原始序列不能被重新發(fā)現(xiàn),并通過一個(gè)類型轉(zhuǎn)換突變。例如,如果給一個(gè)數(shù)組返回序列將返回?cái)?shù)組中的元素,但不能轉(zhuǎn)換返回序列對(duì)象的數(shù)組。 |
reduce : ('T → 'T → 'T) → seq<'T> → 'T | 適用的功能的序列中的每個(gè)元素,穿線通過計(jì)算一個(gè)累加器參數(shù)。通過將所述函數(shù)應(yīng)用于所述第一兩個(gè)元素開始。然后養(yǎng)活這個(gè)結(jié)果到函數(shù)與第三個(gè)元素等等一起。返回的最終結(jié)果。 |
scan : ('State → 'T → 'State) → 'State → seq<'T> → seq<'State> | 像Seq.fold,但計(jì)算點(diǎn)播和返回的中間和最終結(jié)果的順序。 |
singleton : 'T → seq<'T> | 返回只產(chǎn)生一個(gè)項(xiàng)目序列。 |
skip : int → seq<'T> → seq<'T> | 返回跳過基礎(chǔ)序列的元素的指定號(hào)碼,然后產(chǎn)生該序列的其余元素的序列。 |
skipWhile : ('T → bool) → seq<'T> → seq<'T> | 返回一個(gè)序列,迭代時(shí),跳過基礎(chǔ)序列的元素,同時(shí)給定的謂詞返回true,然后產(chǎn)生序列的剩余的元素。 |
sort : seq<'T> → seq<'T> | 產(chǎn)量提高按鍵有序的序列。 |
sortBy : ('T → 'Key) → seq<'T> → seq<'T> | 施加產(chǎn)生關(guān)鍵功能的序列中的每個(gè)元素和屈服通過鍵有序序列。鍵是使用由Operators.compare實(shí)現(xiàn)通用的比較比較。 |
sum : seq<^T> → ^T | 返回序列中的元素的總和。 |
sumby | 返回由將所述函數(shù)應(yīng)用于所述序列中的每個(gè)元件產(chǎn)生的結(jié)果的總和。 |
take : int → seq<'T> → seq<'T> | 返回序列的第一個(gè)元素到一個(gè)指定計(jì)數(shù)。 |
takeWhile : ('T → bool) → seq<'T> → seq<'T> | 返回一個(gè)序列,迭代時(shí),得到的基礎(chǔ)序列的元素,同時(shí)給定的謂詞返回true,然后返回沒有進(jìn)一步的元素。 |
toArray : seq<'T> → 'T[] | 創(chuàng)建從給定集合的數(shù)組。 |
toList : seq<'T> → 'T list | 創(chuàng)建從給定集合列表。 |
truncate : int → seq<'T> → seq<'T> | 返回序列枚舉時(shí)返回比元素指定數(shù)量不多。 |
tryFind : ('T → bool) → seq<'T> → 'T option | 返回給定函數(shù)返回true的第一個(gè)元素,或者沒有這樣的元素存在。 |
tryFindIndex : ('T → bool) → seq<'T> → int option | 返回序列中滿足給定謂詞的第一個(gè)元素的索引,如果沒有此類元素,則返回None。 |
tryPick : ('T → 'U option) → seq<'T> → 'U option | 將給定函數(shù)應(yīng)用于連續(xù)元素,返回函數(shù)返回Somevalue的第一個(gè)值。 |
unfold : ('State → 'T * 'State option) → 'State → seq<'T> | 返回包含由給定運(yùn)算所產(chǎn)生的元素的序列。 |
where : ('T → bool) → seq<'T> → seq<'T> | 返回一個(gè)新集合,只包含給定謂詞returnstrue的集合的元素。 Seq.filter的同義詞。 |
windowed : int → seq<'T> → seq<'T []> | 返回國債收益率滑動(dòng)包含從輸入序列繪制的元素的窗口序列。每個(gè)窗口返回為一個(gè)新的數(shù)組。 |
zip : seq<'T1> → seq<'T2> → seq<'T1 * 'T2> | 結(jié)合了兩個(gè)序列成對(duì)的列表。兩個(gè)序列不必具有相等的長度 - 當(dāng)一個(gè)序列被耗盡在另一序列中的任何剩余的元素將被忽略。 |
zip3 : seq<'T1> → seq<'T2> → seq<'T3> → seq<'T1 * 'T2 * 'T3> | 結(jié)合了三個(gè)序列成三元組的列表。序列不必具有相等的長度 - 當(dāng)一個(gè)序列被耗盡的其他序列的任何剩余元素被忽略。 |
下面的例子演示了上述一些功能的使用
該程序創(chuàng)建一個(gè)空的序列,后來填補(bǔ)它
(* Creating sequences *) let emptySeq = Seq.empty let seq1 = Seq.singleton 20 printfn"The singleton sequence:" printfn "%A " seq1 printfn"The init sequence:" let seq2 = Seq.init 5 (fun n -> n * 3) Seq.iter (fun i -> printf "%d " i) seq2 printfn"" (* converting an array to sequence by using cast *) printfn"The array sequence 1:" let seq3 = [| 1 .. 10 |] :> seq<int> Seq.iter (fun i -> printf "%d " i) seq3 printfn"" (* converting an array to sequence by using Seq.ofArray *) printfn"The array sequence 2:" let seq4 = [| 2..2.. 20 |] |> Seq.ofArray Seq.iter (fun i -> printf "%d " i) seq4 printfn""
當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出
The singleton sequence: seq [20] The init sequence: 0 3 6 9 12 The array sequence 1: 1 2 3 4 5 6 7 8 9 10 The array sequence 2: 2 4 6 8 10 12 14 16 18 20
請(qǐng)注意,
該Seq.empty方法創(chuàng)建一個(gè)空的序列。
該Seq.singleton方法創(chuàng)建只是一個(gè)指定元素的序列。
所述Seq.init方法創(chuàng)建的量,元件通過使用給定的函數(shù)創(chuàng)建的序列。
該Seq.ofArray和Seq.ofList <'T>方法創(chuàng)建數(shù)組和列表序列。
該Seq.iter方法允許通過迭代序列。
該Seq.unfold方法生成從計(jì)算功能,需要一個(gè)狀態(tài)并將其轉(zhuǎn)換生成序列中的每個(gè)后續(xù)元素的序列。
下面的函數(shù)產(chǎn)生的前20個(gè)自然數(shù)
let seq1 = Seq.unfold (fun state -> if (state > 20) then None else Some(state, state + 1)) 0 printfn "The sequence seq1 contains numbers from 0 to 20." for x in seq1 do printf "%d " x printfn" "
當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出
The sequence seq1 contains numbers from 0 to 20. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
所述Seq.truncate方法創(chuàng)建從另一序列的序列,但限制了序列元素的指定數(shù)量。
所述Seq.take方法創(chuàng)建一個(gè)包含從一個(gè)序列的開始元素的指定數(shù)目的新序列。
let mySeq = seq { for i in 1 .. 10 -> 3*i } let truncatedSeq = Seq.truncate 5 mySeq let takeSeq = Seq.take 5 mySeq printfn"The original sequence" Seq.iter (fun i -> printf "%d " i) mySeq printfn"" printfn"The truncated sequence" Seq.iter (fun i -> printf "%d " i) truncatedSeq printfn"" printfn"The take sequence" Seq.iter (fun i -> printf "%d " i) takeSeq printfn""
當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出
The original sequence 3 6 9 12 15 18 21 24 27 30 The truncated sequence 3 6 9 12 15 The take sequence 3 6 9 12 15
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: