99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

F#數(shù)組

2018-12-15 17:09 更新

數(shù)組是固定大小的,基于零的,可變的所有相同類(lèi)型的連續(xù)數(shù)據(jù)元素的集合。

創(chuàng)建數(shù)組

可以創(chuàng)建使用各種語(yǔ)法和方法陣列或通過(guò)使用從陣列模塊的功能。在本節(jié)中,我們將討論在不使用模塊的功能創(chuàng)建數(shù)組。

有三種語(yǔ)法方法來(lái)創(chuàng)建沒(méi)有函數(shù)的數(shù)組 

1、通過(guò)列出[| 和|],并用分號(hào)分隔。
2、通過(guò)將每個(gè)元素放在單獨(dú)的行上,在這種情況下,分號(hào)分隔符是可選的。
3、通過(guò)使用序列表達(dá)式。
您可以使用點(diǎn)運(yùn)算符(。)和方括號(hào)([and])訪(fǎng)問(wèn)數(shù)組元素。
以下示例演示創(chuàng)建數(shù)組 

//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

對(duì)數(shù)組基本操作

庫(kù)模塊Microsoft.FSharp.Collections.Array支持對(duì)一維數(shù)組的操作。
下表顯示了數(shù)組的基本操作 

描述
append : 'T [] → 'T [] → 'T []創(chuàng)建包含后跟另一個(gè)陣列的元件中的一個(gè)數(shù)組的元素的數(shù)組。
average : ^T [] → ^T返回的數(shù)組的元素的平均值。
averageBy : ('T → ^U) → 'T [] → ^U返回通過(guò)施加一個(gè)函數(shù)的陣列的每個(gè)元件產(chǎn)生的元素的平均。
blit : 'T [] → int → 'T [] → int → int → unit讀取范圍從一個(gè)數(shù)組中的元素,并將其寫(xiě)入到另一個(gè)。
choose : ('T → U option) → 'T [] → 'U []一個(gè)應(yīng)用提供的函數(shù)對(duì)數(shù)組中的每個(gè)元素。返回包含每個(gè)元素的結(jié)果x上的數(shù)組,該函數(shù)返回一些(X)。
collect : ('T → 'U []) → T [] → 'U []應(yīng)用提供的函數(shù),一個(gè)陣列的每個(gè)元素,并置的結(jié)果,并返回合并數(shù)組。
concat : seq<'T []> → 'T []創(chuàng)建一個(gè)包含每個(gè)陣列提供的序列中的元素的數(shù)組。
copy : 'T → 'T []創(chuàng)建一個(gè)包含所提供數(shù)組的元素的數(shù)組。
create : int → 'T → 'T []創(chuàng)建一個(gè)數(shù)組,其元素都是最初所提供的值。
empty : 'T []返回給定類(lèi)型的空數(shù)組。
exists : ('T → bool) → 'T [] → bool測(cè)試數(shù)組中的任何元素是否滿(mǎn)足所提供的謂語(yǔ)。
exists2 : ('T1 → 'T2 → bool) → 'T1 [] → 'T2 [] → bool測(cè)試是否有對(duì)兩個(gè)數(shù)組的相應(yīng)元素的滿(mǎn)足提供的條件。
fill : 'T [] → int → int → 'T → unit填補(bǔ)了一系列與所提供的數(shù)值數(shù)組的元素。
filter : ('T → bool) → 'T [] → 'T []返回只包含所提供的數(shù)組,所提供的條件返回true的元素的集合。
find : ('T → bool) → 'T [] → 'T返回為其提供的函數(shù)返回true的第一個(gè)元素。引發(fā)KeyNotFoundException如果沒(méi)有這樣的元素存在。
findIndex : ('T → bool) → 'T [] → int返回滿(mǎn)足提供的條件數(shù)組的第一個(gè)元素的索引。引發(fā)KeyNotFoundException如果沒(méi)有一個(gè)元素的滿(mǎn)足該條件。
fold : ('State → 'T → 'State) → 'State → 'T [] → 'State
將函數(shù)應(yīng)用于數(shù)組中的每個(gè)元素,穿線(xiàn)通過(guò)計(jì)算累加器的說(shuō)法。如果輸入函數(shù)為f,所述陣列元件是I0 ...中,此函數(shù)計(jì)算F(...(FS I0)...)中。
fold2 : ('State → 'T1 → 'T2 → 'State) → 'State → 'T1 [] → 'T2 [] → 'State適用于對(duì)從兩個(gè)提供的數(shù)組中的元素,左到右,穿線(xiàn)通過(guò)計(jì)算累加器參數(shù)的函數(shù)。兩個(gè)輸入數(shù)組必須具有相同的長(zhǎng)度;否則,ArgumentException的上升。
foldBack : ('T → 'State → 'State) → 'T [] → 'State → 'State將函數(shù)應(yīng)用于數(shù)組中的每個(gè)元素,穿線(xiàn)通過(guò)計(jì)算累加器的說(shuō)法。如果輸入函數(shù)為f,所述陣列元件是I0 ...中,此函數(shù)計(jì)算?FI0(...(F s中))。
foldBack2 : ('T1 → 'T2 → 'State → 'State) → 'T1 [] → 'T2 [] → 'State → 'State將函數(shù)應(yīng)用于對(duì)從兩個(gè)提供的數(shù)組中的元素,從右到左,穿線(xiàn)通過(guò)計(jì)算累加器的說(shuō)法。兩個(gè)輸入數(shù)組必須具有相同的長(zhǎng)度;否則,ArgumentException的上升。
forall : ('T → bool) → 'T [] → bool測(cè)試數(shù)組中的所有元素是否滿(mǎn)足提供的條件。
forall2 : ('T1 → 'T2 → bool) → 'T1 [] → 'T2 [] → bool測(cè)試是否提供的兩個(gè)陣列的所有相應(yīng)的元素滿(mǎn)足提供的條件。
get : 'T [] → int → 'T會(huì)從數(shù)組中的元素。
init : int → (int → 'T) → 'T []使用提供的函數(shù)來(lái)創(chuàng)建提供維數(shù)組。
isEmpty : 'T [] → bool測(cè)試一個(gè)數(shù)組是否有任何元素。
iter : ('T → unit) → 'T [] → unit應(yīng)用提供的函數(shù),一個(gè)數(shù)組中的每個(gè)元素。
iter2 : ('T1 → 'T2 → unit) → 'T1 [] → 'T2 [] → unit)應(yīng)用提供的函數(shù),一對(duì)從兩個(gè)數(shù)組索引匹配的元素。兩個(gè)陣列必須具有相同的長(zhǎng)度;否則,ArgumentException的上升。
iteri : (int → 'T → unit) → 'T [] → unit應(yīng)用提供的函數(shù),一個(gè)數(shù)組中的每個(gè)元素。傳遞給函數(shù)的整數(shù)表示該元素的索引。
iteri2 : (int → 'T1 → 'T2 → unit) → 'T1 [] → 'T2 [] → unit應(yīng)用提供的函數(shù),一對(duì)從兩個(gè)陣列的匹配的索引,也傳遞元件的索引元素。兩個(gè)陣列必須具有相同的長(zhǎng)度;否則,一個(gè)ArgumentException升高。
length : 'T [] → int返回的數(shù)組的長(zhǎng)度。 Length屬性做同樣的事情。
map : ('T → 'U) → 'T [] → 'U []創(chuàng)建一個(gè)數(shù)組,其元素施加提供的函數(shù),每一個(gè)提供的數(shù)組的元素的結(jié)果。
map2 : ('T1 → 'T2 → 'U) → 'T1 [] → 'T2 [] → 'U []創(chuàng)建一個(gè)數(shù)組,其元素是應(yīng)用提供的函數(shù),提供的兩個(gè)數(shù)組的相應(yīng)元素的結(jié)果。兩個(gè)輸入數(shù)組必須具有相同的長(zhǎng)度;否則,ArgumentException的上升。
mapi : (int → 'T → 'U) → 'T [] → 'U []創(chuàng)建一個(gè)數(shù)組,其元素施加提供的函數(shù),每一個(gè)提供的數(shù)組的元素的結(jié)果。傳遞給函數(shù)的整數(shù)索引指示正在轉(zhuǎn)變的元素的索引。
mapi2 : (int → 'T1 → 'T2 → 'U) → 'T1 [] → 'T2 [] → 'U []創(chuàng)建一個(gè)數(shù)組,其元素施加提供的函數(shù),所述兩個(gè)集合成對(duì)的相應(yīng)的元件,也傳遞元件的索引的結(jié)果。兩個(gè)輸入數(shù)組必須具有相同的長(zhǎng)度;否則,ArgumentException的上升。
max : 'T [] → 'T返回最大的數(shù)組中的所有元素。 Operators.max用于元素進(jìn)行比較。
maxBy : ('T → 'U) → 'T [] → 'T返回最大的數(shù)組的所有元素,通過(guò)Operators.max上的功能結(jié)果相比較。
min : ('T [] → 'T返回最小的一個(gè)數(shù)組的所有元素。 Operators.min用于元素進(jìn)行比較。
minBy:('T→'U)→“T []→'T返回最小的一個(gè)數(shù)組的所有元素。 Operators.min用于元素進(jìn)行比較。
ofList : 'T list → 'T []創(chuàng)建一個(gè)從所提供的列表中的數(shù)組。
ofSeq : seq<'T> → 'T []創(chuàng)建一個(gè)從所提供的枚舉對(duì)象的數(shù)組。
partition : ('T → bool) → 'T [] → 'T [] * 'T []分割的陣列分成兩個(gè)陣列,一個(gè)包含的量,提供的條件返回true的元素,和其他含有這些對(duì)于其返回false。
permute : (int → int) → 'T [] → 'T []根據(jù)指定的置換Permutes數(shù)組的元素。
pick : ('T → 'U option) → 'T [] → 'U應(yīng)用提供的函數(shù),所提供的數(shù)組的連續(xù)元素,返回的第一個(gè)結(jié)果所在的函數(shù)返回一些(十)有些X的。如果函數(shù)永遠(yuǎn)不會(huì)返回部分(X),KeyNotFoundException升高。
reduce : ('T → 'T → 'T) → 'T [] → 'T將函數(shù)應(yīng)用于數(shù)組中的每個(gè)元素,穿線(xiàn)通過(guò)計(jì)算累加器的說(shuō)法。如果輸入函數(shù)為f,所述陣列元件是I0 ...中,此函數(shù)計(jì)算F(...(六I0的i1)...)中。如果數(shù)組的大小為零,ArgumentException的升高。
reduceBack:('T→'T→'T)→“T []→'T將函數(shù)應(yīng)用于數(shù)組中的每個(gè)元素,穿線(xiàn)通過(guò)計(jì)算累加器的說(shuō)法。如果輸入函數(shù)是f和元素I0 ...中,此函數(shù)計(jì)算?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è)置一個(gè)數(shù)組中的一個(gè)元素。
sort : 'T[] → 'T []排序的數(shù)組中的元素,并返回一個(gè)新的數(shù)組。 Operators.compare用于元素進(jìn)行比較。
sortBy : ('T → 'Key) → 'T [] → 'T []使用附帶的功能改造元素上排序操作所基于的類(lèi)型排序的數(shù)組的元素,并返回一個(gè)新的數(shù)組。 Operators.compare用于元素進(jìn)行比較。
sortInPlace : 'T [] → unit通過(guò)改變到位陣列,使用提供的比較函數(shù)排序數(shù)組的元素。 Operators.compare用于元素進(jìn)行比較。
sortInPlaceBy : ('T → 'Key) → 'T [] → unit通過(guò)改變到位陣列,使用為鍵所提供的投影排序數(shù)組的元素。 Operators.compare用于元素進(jìn)行比較。
sortInPlaceWith : ('T → 'T → int) → 'T [] → unit使用附帶的比較功能改變的地方數(shù)組排序數(shù)組的元素。
sortWith : ('T → 'T → int) → 'T [] → 'T []使用附帶的比較函數(shù)排序數(shù)組的元素,并返回一個(gè)新的數(shù)組。
sub : 'T [] → int → int → 'T []創(chuàng)建包含所提供的子范圍,它是由開(kāi)始索引和長(zhǎng)度指定的數(shù)組。
sum : 'T [] → ^T返回?cái)?shù)組中的元素的總和。
sumBy : ('T → ^U) → 'T [] → ^U返回通過(guò)施加一個(gè)函數(shù)的陣列的每個(gè)元件產(chǎn)生的結(jié)果的總和。
toList : 'T [] → 'T list所提供的數(shù)組列表轉(zhuǎn)換。
toSeq : 'T [] → seq<'T>享有提供的數(shù)組作為序列。
tryFind : ('T → bool) → 'T [] → 'T option返回提供的數(shù)組為其提供的函數(shù)返回true的第一個(gè)元素。如果沒(méi)有這樣的元素存在,則返回無(wú) 。
tryFindIndex : ('T → bool) → 'T [] → int option返回滿(mǎn)足提供的條件數(shù)組的第一個(gè)元素的索引。
tryPick : ('T → 'U option) → 'T [] → 'U option應(yīng)用提供的函數(shù),所提供的陣列的相繼的元素,并返回第一個(gè)結(jié)果,其中函數(shù)返回部分(x)的一些X]。如果函數(shù)永遠(yuǎn)不會(huì)返回部分(X),返回None。
unzip : ('T1 * 'T2) [] → 'T1 [] * 'T2 []拆分元組對(duì)的數(shù)組分成兩個(gè)數(shù)組的元組。
unzip3:('T1 *'T2 *'T3)[]→“T1 [] *'T2 [] *'T3 []分裂三種元素的元組的陣列成三個(gè)陣列中的元組。
zeroCreate:INT→'T []創(chuàng)建一個(gè)數(shù)組,其元素最初設(shè)置為Unchecked.defaultof <'T>的默認(rèn)值。
zip : 'T1 [] → 'T2 [] → ('T1 * 'T2) []結(jié)合兩個(gè)陣列成具有兩個(gè)元素的元組的陣列。兩個(gè)數(shù)組必須有相等的長(zhǎng)度;否則,ArgumentException的上升。
zip3:“T1 []→'T2 []→”T3 []→('T1 *'T2 * 113'T3)[]結(jié)合三個(gè)數(shù)組成有三個(gè)元素的元組的數(shù)組。三個(gè)數(shù)組必須有相等的長(zhǎng)度;否則,ArgumentException的上升。

在以下部分中,我們將看到的一些這些功能的用途。

創(chuàng)建陣列使用函數(shù)

陣列模塊提供了從頭開(kāi)始創(chuàng)建一個(gè)數(shù)組多種功能。

  • Array.empty函數(shù)創(chuàng)建一個(gè)新的空數(shù)組。

  • Array.create函數(shù)創(chuàng)建一個(gè)指定大小的數(shù)組,并將所有元素給定的值。

  • 所述Array.init函數(shù)給出的尺寸和產(chǎn)生的元素的函數(shù)創(chuàng)建一個(gè)數(shù)組。

  • 所述Array.zeroCreate函數(shù)創(chuàng)建在其中所有元素初始化為零值的數(shù)組。

  • Array.copy函數(shù)創(chuàng)建一個(gè)包含從現(xiàn)有陣列復(fù)制元素的數(shù)組。

  • Array.sub函數(shù)生成從陣列中的一個(gè)子范圍的新數(shù)組。

  • Array.append函數(shù)創(chuàng)建通過(guò)合并兩個(gè)現(xiàn)有陣列的新數(shù)組。

  • Array.choose功能選擇一個(gè)數(shù)組元素在新數(shù)組中包含。

  • Array.collect功能運(yùn)行的現(xiàn)有陣列的每個(gè)數(shù)組元素的指定函數(shù),然后收集該函數(shù)生成的元素,并將它們組合成一個(gè)新的數(shù)組。

  • Array.concat函數(shù)接受陣列的序列,并將它們組合成一個(gè)陣列。

  • Array.filter函數(shù)接受一個(gè)布爾條件的功能,并只包含從輸入數(shù)組,它的條件是真的這些元素的數(shù)組。

  • Array.rev函數(shù)通過(guò)顛倒現(xiàn)有數(shù)組的順序的新數(shù)組。

下面的例子演示這些功能 

例1

(* 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|]

例2

(* 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|]

搜索數(shù)組

Array.find函數(shù)接受一個(gè)布爾函數(shù),并返回該函數(shù)返回true的第一個(gè)元素,否則會(huì)引發(fā)KeyNotFoundException。

所述Array.findIndex功能工作,除了它返回元素的索引,而不是元素本身類(lèi)似。

下面的例子說(shuō)明了這一點(diǎn)。

Microsoft提供這個(gè)有趣的程序例子,它找到的第一個(gè)元件在給定的數(shù),它是兩個(gè)完全平方以及完美立方體的范圍 

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.
以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)