W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
數(shù)組是固定大小的,基于零的,可變的所有相同類型的連續(xù)數(shù)據(jù)元素的集合。
可以創(chuàng)建使用各種語法和方法陣列或通過使用從陣列模塊的功能。在本節(jié)中,我們將討論在不使用模塊的功能創(chuàng)建數(shù)組。
有三種語法方法來創(chuàng)建沒有函數(shù)的數(shù)組
1、通過列出[| 和|],并用分號分隔。
//using semicolon separator let array1 = [| 1; 2; 3; 4; 5; 6 |] for i in 0 .. array1.Length - 1 do printf "%d " array1.[i] printfn" " // without semicolon separator let array2 = [| 1 2 3 4 5 |] for i in 0 .. array2.Length - 1 do printf "%d " array2.[i] printfn" " //using sequence let array3 = [| for i in 1 .. 10 -> i * i |] for i in 0 .. array3.Length - 1 do printf "%d " array3.[i] printfn" "
當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出
1 2 3 4 5 6 1 2 3 4 5 1 4 9 16 25 36 49 64 81 100
值 | 描述 |
---|---|
append : 'T [] → 'T [] → 'T [] | 創(chuàng)建包含后跟另一個陣列的元件中的一個數(shù)組的元素的數(shù)組。 |
average : ^T [] → ^T | 返回的數(shù)組的元素的平均值。 |
averageBy : ('T → ^U) → 'T [] → ^U | 返回通過施加一個函數(shù)的陣列的每個元件產(chǎn)生的元素的平均。 |
blit : 'T [] → int → 'T [] → int → int → unit | 讀取范圍從一個數(shù)組中的元素,并將其寫入到另一個。 |
choose : ('T → U option) → 'T [] → 'U [] | 一個應(yīng)用提供的函數(shù)對數(shù)組中的每個元素。返回包含每個元素的結(jié)果x上的數(shù)組,該函數(shù)返回一些(X)。 |
collect : ('T → 'U []) → T [] → 'U [] | 應(yīng)用提供的函數(shù),一個陣列的每個元素,并置的結(jié)果,并返回合并數(shù)組。 |
concat : seq<'T []> → 'T [] | 創(chuàng)建一個包含每個陣列提供的序列中的元素的數(shù)組。 |
copy : 'T → 'T [] | 創(chuàng)建一個包含所提供數(shù)組的元素的數(shù)組。 |
create : int → 'T → 'T [] | 創(chuàng)建一個數(shù)組,其元素都是最初所提供的值。 |
empty : 'T [] | 返回給定類型的空數(shù)組。 |
exists : ('T → bool) → 'T [] → bool | 測試數(shù)組中的任何元素是否滿足所提供的謂語。 |
exists2 : ('T1 → 'T2 → bool) → 'T1 [] → 'T2 [] → bool | 測試是否有對兩個數(shù)組的相應(yīng)元素的滿足提供的條件。 |
fill : 'T [] → int → int → 'T → unit | 填補了一系列與所提供的數(shù)值數(shù)組的元素。 |
filter : ('T → bool) → 'T [] → 'T [] | 返回只包含所提供的數(shù)組,所提供的條件返回true的元素的集合。 |
find : ('T → bool) → 'T [] → 'T | 返回為其提供的函數(shù)返回true的第一個元素。引發(fā)KeyNotFoundException如果沒有這樣的元素存在。 |
findIndex : ('T → bool) → 'T [] → int | 返回滿足提供的條件數(shù)組的第一個元素的索引。引發(fā)KeyNotFoundException如果沒有一個元素的滿足該條件。 |
fold : ('State → 'T → 'State) → 'State → 'T [] → 'State | 將函數(shù)應(yīng)用于數(shù)組中的每個元素,穿線通過計算累加器的說法。如果輸入函數(shù)為f,所述陣列元件是I0 ...中,此函數(shù)計算F(...(FS I0)...)中。 |
fold2 : ('State → 'T1 → 'T2 → 'State) → 'State → 'T1 [] → 'T2 [] → 'State | 適用于對從兩個提供的數(shù)組中的元素,左到右,穿線通過計算累加器參數(shù)的函數(shù)。兩個輸入數(shù)組必須具有相同的長度;否則,ArgumentException的上升。 |
foldBack : ('T → 'State → 'State) → 'T [] → 'State → 'State | 將函數(shù)應(yīng)用于數(shù)組中的每個元素,穿線通過計算累加器的說法。如果輸入函數(shù)為f,所述陣列元件是I0 ...中,此函數(shù)計算?FI0(...(F s中))。 |
foldBack2 : ('T1 → 'T2 → 'State → 'State) → 'T1 [] → 'T2 [] → 'State → 'State | 將函數(shù)應(yīng)用于對從兩個提供的數(shù)組中的元素,從右到左,穿線通過計算累加器的說法。兩個輸入數(shù)組必須具有相同的長度;否則,ArgumentException的上升。 |
forall : ('T → bool) → 'T [] → bool | 測試數(shù)組中的所有元素是否滿足提供的條件。 |
forall2 : ('T1 → 'T2 → bool) → 'T1 [] → 'T2 [] → bool | 測試是否提供的兩個陣列的所有相應(yīng)的元素滿足提供的條件。 |
get : 'T [] → int → 'T | 會從數(shù)組中的元素。 |
init : int → (int → 'T) → 'T [] | 使用提供的函數(shù)來創(chuàng)建提供維數(shù)組。 |
isEmpty : 'T [] → bool | 測試一個數(shù)組是否有任何元素。 |
iter : ('T → unit) → 'T [] → unit | 應(yīng)用提供的函數(shù),一個數(shù)組中的每個元素。 |
iter2 : ('T1 → 'T2 → unit) → 'T1 [] → 'T2 [] → unit) | 應(yīng)用提供的函數(shù),一對從兩個數(shù)組索引匹配的元素。兩個陣列必須具有相同的長度;否則,ArgumentException的上升。 |
iteri : (int → 'T → unit) → 'T [] → unit | 應(yīng)用提供的函數(shù),一個數(shù)組中的每個元素。傳遞給函數(shù)的整數(shù)表示該元素的索引。 |
iteri2 : (int → 'T1 → 'T2 → unit) → 'T1 [] → 'T2 [] → unit | 應(yīng)用提供的函數(shù),一對從兩個陣列的匹配的索引,也傳遞元件的索引元素。兩個陣列必須具有相同的長度;否則,一個ArgumentException升高。 |
length : 'T [] → int | 返回的數(shù)組的長度。 Length屬性做同樣的事情。 |
map : ('T → 'U) → 'T [] → 'U [] | 創(chuàng)建一個數(shù)組,其元素施加提供的函數(shù),每一個提供的數(shù)組的元素的結(jié)果。 |
map2 : ('T1 → 'T2 → 'U) → 'T1 [] → 'T2 [] → 'U [] | 創(chuàng)建一個數(shù)組,其元素是應(yīng)用提供的函數(shù),提供的兩個數(shù)組的相應(yīng)元素的結(jié)果。兩個輸入數(shù)組必須具有相同的長度;否則,ArgumentException的上升。 |
mapi : (int → 'T → 'U) → 'T [] → 'U [] | 創(chuàng)建一個數(shù)組,其元素施加提供的函數(shù),每一個提供的數(shù)組的元素的結(jié)果。傳遞給函數(shù)的整數(shù)索引指示正在轉(zhuǎn)變的元素的索引。 |
mapi2 : (int → 'T1 → 'T2 → 'U) → 'T1 [] → 'T2 [] → 'U [] | 創(chuàng)建一個數(shù)組,其元素施加提供的函數(shù),所述兩個集合成對的相應(yīng)的元件,也傳遞元件的索引的結(jié)果。兩個輸入數(shù)組必須具有相同的長度;否則,ArgumentException的上升。 |
max : 'T [] → 'T | 返回最大的數(shù)組中的所有元素。 Operators.max用于元素進(jìn)行比較。 |
maxBy : ('T → 'U) → 'T [] → 'T | 返回最大的數(shù)組的所有元素,通過Operators.max上的功能結(jié)果相比較。 |
min : ('T [] → 'T | 返回最小的一個數(shù)組的所有元素。 Operators.min用于元素進(jìn)行比較。 |
minBy:('T→'U)→“T []→'T | 返回最小的一個數(shù)組的所有元素。 Operators.min用于元素進(jìn)行比較。 |
ofList : 'T list → 'T [] | 創(chuàng)建一個從所提供的列表中的數(shù)組。 |
ofSeq : seq<'T> → 'T [] | 創(chuàng)建一個從所提供的枚舉對象的數(shù)組。 |
partition : ('T → bool) → 'T [] → 'T [] * 'T [] | 分割的陣列分成兩個陣列,一個包含的量,提供的條件返回true的元素,和其他含有這些對于其返回false。 |
permute : (int → int) → 'T [] → 'T [] | 根據(jù)指定的置換Permutes數(shù)組的元素。 |
pick : ('T → 'U option) → 'T [] → 'U | 應(yīng)用提供的函數(shù),所提供的數(shù)組的連續(xù)元素,返回的第一個結(jié)果所在的函數(shù)返回一些(十)有些X的。如果函數(shù)永遠(yuǎn)不會返回部分(X),KeyNotFoundException升高。 |
reduce : ('T → 'T → 'T) → 'T [] → 'T | 將函數(shù)應(yīng)用于數(shù)組中的每個元素,穿線通過計算累加器的說法。如果輸入函數(shù)為f,所述陣列元件是I0 ...中,此函數(shù)計算F(...(六I0的i1)...)中。如果數(shù)組的大小為零,ArgumentException的升高。 |
reduceBack:('T→'T→'T)→“T []→'T | 將函數(shù)應(yīng)用于數(shù)組中的每個元素,穿線通過計算累加器的說法。如果輸入函數(shù)是f和元素I0 ...中,此函數(shù)計算?FI0(...(F IN-1))。如果數(shù)組的大小為零,ArgumentException的升高。 |
rev : 'T [] → 'T [] | 反轉(zhuǎn)在供給數(shù)組中的元素的順序。 |
scan : ('State → 'T → 'State) → 'State → 'T [] → 'State []) | 行為就像折,但是中間結(jié)果與最終結(jié)果一起返回。 |
scanBack : ('T → 'State → 'State) → 'T [] → 'State → 'State [] | 行為就像折返,但中介結(jié)果與最終結(jié)果一起返回。 |
set : 'T [] → int → 'T → unit | 設(shè)置一個數(shù)組中的一個元素。 |
sort : 'T[] → 'T [] | 排序的數(shù)組中的元素,并返回一個新的數(shù)組。 Operators.compare用于元素進(jìn)行比較。 |
sortBy : ('T → 'Key) → 'T [] → 'T [] | 使用附帶的功能改造元素上排序操作所基于的類型排序的數(shù)組的元素,并返回一個新的數(shù)組。 Operators.compare用于元素進(jìn)行比較。 |
sortInPlace : 'T [] → unit | 通過改變到位陣列,使用提供的比較函數(shù)排序數(shù)組的元素。 Operators.compare用于元素進(jìn)行比較。 |
sortInPlaceBy : ('T → 'Key) → 'T [] → unit | 通過改變到位陣列,使用為鍵所提供的投影排序數(shù)組的元素。 Operators.compare用于元素進(jìn)行比較。 |
sortInPlaceWith : ('T → 'T → int) → 'T [] → unit | 使用附帶的比較功能改變的地方數(shù)組排序數(shù)組的元素。 |
sortWith : ('T → 'T → int) → 'T [] → 'T [] | 使用附帶的比較函數(shù)排序數(shù)組的元素,并返回一個新的數(shù)組。 |
sub : 'T [] → int → int → 'T [] | 創(chuàng)建包含所提供的子范圍,它是由開始索引和長度指定的數(shù)組。 |
sum : 'T [] → ^T | 返回數(shù)組中的元素的總和。 |
sumBy : ('T → ^U) → 'T [] → ^U | 返回通過施加一個函數(shù)的陣列的每個元件產(chǎn)生的結(jié)果的總和。 |
toList : 'T [] → 'T list | 所提供的數(shù)組列表轉(zhuǎn)換。 |
toSeq : 'T [] → seq<'T> | 享有提供的數(shù)組作為序列。 |
tryFind : ('T → bool) → 'T [] → 'T option | 返回提供的數(shù)組為其提供的函數(shù)返回true的第一個元素。如果沒有這樣的元素存在,則返回無 。 |
tryFindIndex : ('T → bool) → 'T [] → int option | 返回滿足提供的條件數(shù)組的第一個元素的索引。 |
tryPick : ('T → 'U option) → 'T [] → 'U option | 應(yīng)用提供的函數(shù),所提供的陣列的相繼的元素,并返回第一個結(jié)果,其中函數(shù)返回部分(x)的一些X]。如果函數(shù)永遠(yuǎn)不會返回部分(X),返回None。 |
unzip : ('T1 * 'T2) [] → 'T1 [] * 'T2 [] | 拆分元組對的數(shù)組分成兩個數(shù)組的元組。 |
unzip3:('T1 *'T2 *'T3)[]→“T1 [] *'T2 [] *'T3 [] | 分裂三種元素的元組的陣列成三個陣列中的元組。 |
zeroCreate:INT→'T [] | 創(chuàng)建一個數(shù)組,其元素最初設(shè)置為Unchecked.defaultof <'T>的默認(rèn)值。 |
zip : 'T1 [] → 'T2 [] → ('T1 * 'T2) [] | 結(jié)合兩個陣列成具有兩個元素的元組的陣列。兩個數(shù)組必須有相等的長度;否則,ArgumentException的上升。 |
zip3:“T1 []→'T2 []→”T3 []→('T1 *'T2 * 113'T3)[] | 結(jié)合三個數(shù)組成有三個元素的元組的數(shù)組。三個數(shù)組必須有相等的長度;否則,ArgumentException的上升。 |
在以下部分中,我們將看到的一些這些功能的用途。
陣列模塊提供了從頭開始創(chuàng)建一個數(shù)組多種功能。
該Array.empty函數(shù)創(chuàng)建一個新的空數(shù)組。
該Array.create函數(shù)創(chuàng)建一個指定大小的數(shù)組,并將所有元素給定的值。
所述Array.init函數(shù)給出的尺寸和產(chǎn)生的元素的函數(shù)創(chuàng)建一個數(shù)組。
所述Array.zeroCreate函數(shù)創(chuàng)建在其中所有元素初始化為零值的數(shù)組。
該Array.copy函數(shù)創(chuàng)建一個包含從現(xiàn)有陣列復(fù)制元素的數(shù)組。
該Array.sub函數(shù)生成從陣列中的一個子范圍的新數(shù)組。
該Array.append函數(shù)創(chuàng)建通過合并兩個現(xiàn)有陣列的新數(shù)組。
該Array.choose功能選擇一個數(shù)組元素在新數(shù)組中包含。
該Array.collect功能運行的現(xiàn)有陣列的每個數(shù)組元素的指定函數(shù),然后收集該函數(shù)生成的元素,并將它們組合成一個新的數(shù)組。
該Array.concat函數(shù)接受陣列的序列,并將它們組合成一個陣列。
該Array.filter函數(shù)接受一個布爾條件的功能,并只包含從輸入數(shù)組,它的條件是真的這些元素的數(shù)組。
該Array.rev函數(shù)通過顛倒現(xiàn)有數(shù)組的順序的新數(shù)組。
下面的例子演示這些功能
(* using create and set *) let array1 = Array.create 10 "" for i in 0 .. array1.Length - 1 do Array.set array1 i (i.ToString()) for i in 0 .. array1.Length - 1 do printf "%s " (Array.get array1 i) printfn " " (* empty array *) let array2 = Array.empty printfn "Length of empty array: %d" array2.Length let array3 = Array.create 10 7.0 printfn "Float Array: %A" array3 (* using the init and zeroCreate *) let array4 = Array.init 10 (fun index -> index * index) printfn "Array of squares: %A" array4 let array5 : float array = Array.zeroCreate 10 let (myZeroArray : float array) = Array.zeroCreate 10 printfn "Float Array: %A" array5
當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出
0 1 2 3 4 5 6 7 8 9 Length of empty array: 0 Float Array: [|7.0; 7.0; 7.0; 7.0; 7.0; 7.0; 7.0; 7.0; 7.0; 7.0|] Array of squares: [|0; 1; 4; 9; 16; 25; 36; 49; 64; 81|] Float Array: [|0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0|]
(* creating subarray from element 5 *) (* containing 15 elements thereon *) let array1 = [| 0 .. 50 |] let array2 = Array.sub array1 5 15 printfn "Sub Array:" printfn "%A" array2 (* appending two arrays *) let array3 = [| 1; 2; 3; 4|] let array4 = [| 5 .. 9 |] printfn "Appended Array:" let array5 = Array.append array3 array4 printfn "%A" array5 (* using the Choose function *) let array6 = [| 1 .. 20 |] let array7 = Array.choose (fun elem -> if elem % 3 = 0 then Some(float (elem)) else None) array6 printfn "Array with Chosen elements:" printfn "%A" array7 (*using the Collect function *) let array8 = [| 2 .. 5 |] let array9 = Array.collect (fun elem -> [| 0 .. elem - 1 |]) array8 printfn "Array with collected elements:" printfn "%A" array9
當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出
Sub Array: [|5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19|] Appended Array: [|1; 2; 3; 4; 5; 6; 7; 8; 9|] Array with Chosen elements: [|3.0; 6.0; 9.0; 12.0; 15.0; 18.0|] Array with collected elements: [|0; 1; 0; 1; 2; 0; 1; 2; 3; 0; 1; 2; 3; 4|]
該Array.find函數(shù)接受一個布爾函數(shù),并返回該函數(shù)返回true的第一個元素,否則會引發(fā)KeyNotFoundException。
所述Array.findIndex功能工作,除了它返回元素的索引,而不是元素本身類似。
下面的例子說明了這一點。
Microsoft提供這個有趣的程序例子,它找到的第一個元件在給定的數(shù),它是兩個完全平方以及完美立方體的范圍
let array1 = [| 2 .. 100 |] let delta = 1.0e-10 let isPerfectSquare (x:int) = let y = sqrt (float x) abs(y - round y) < delta let isPerfectCube (x:int) = let y = System.Math.Pow(float x, 1.0/3.0) abs(y - round y) < delta let element = Array.find (fun elem -> isPerfectSquare elem && isPerfectCube elem) array1 let index = Array.findIndex (fun elem -> isPerfectSquare elem && isPerfectCube elem) array1 printfn "The first element that is both a square and a cube is %d and its index is %d." element index
當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出
The first element that is both a square and a cube is 64 and its index is 62.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: