F#集

2018-12-15 15:43 更新

F#中的集合是一種數(shù)據(jù)結(jié)構(gòu),用作項(xiàng)目的集合,而不保留插入項(xiàng)目的順序。 集合不允許將重復(fù)條目插入到集合中。

創(chuàng)建集

集可以通過(guò)以下方式創(chuàng)建

  • 通過(guò)創(chuàng)建使用Set.empty空集和添加使用add函數(shù)項(xiàng)。
  • 轉(zhuǎn)換序列和列表來(lái)套。

下面是程序演示

(* creating sets *)
let set1 = Set.empty.Add(3).Add(5).Add(7). Add(9)
printfn"The new set: %A" set1

let weekdays = Set.ofList ["mon"; "tues"; "wed"; "thurs"; "fri"]
printfn "The list set: %A" weekdays

let set2 = Set.ofSeq [ 1 .. 2.. 10 ]
printfn "The sequence set: %A" set2

當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出 

The new set: set [3; 5; 7; 9]
The list set: set ["fri"; "mon"; "thurs"; "tues"; "wed"]
The sequence set: set [1; 3; 5; 7; 9]

集的基本操作

下表顯示了集的基本操作 

描述
add : 'T → Set<'T> → Set<'T>返回添加到集合中的元素的新集合。 如果集合已包含給定元素,則不會(huì)引發(fā)異常。
contains : 'T → Set<'T> → bool如果給定元素在給定集合中,則計(jì)算為true。
count : Set<'T> → int返回集合中的元素的數(shù)量。
difference : Set<'T> → Set<'T> → Set<'T>返回一個(gè)新的組與第二組從所述第一除去的元素。
empty : Set<'T>指定類(lèi)型的空集。
exists : ('T → bool) → Set<'T> → bool測(cè)試集合的任何元素是否滿足給定謂詞。 如果輸入函數(shù)是謂詞并且元素是i0 ... iN,則該函數(shù)計(jì)算謂詞i0或...或謂詞iN。
filter : ('T → bool) → Set<'T> → Set<'T>返回包含只對(duì)給定的謂詞返回true的集合中的元素一個(gè)新的集合。
fold : ('State → 'T → 'State) → 'State → Set<'T> → 'State應(yīng)用于給定的累積功能所設(shè)定的所有要素。
foldBack : ('T → 'State → 'State) → Set<'T> → 'State → 'State應(yīng)用于給定的累積功能所設(shè)定的所有要素。
forall : ('T → bool) → Set<'T> → bool測(cè)試集合的所有元素是否滿足給定謂詞。 如果輸入函數(shù)是p并且元素是i0 ... iN,則該函數(shù)計(jì)算p i0 && ... && p iN。
intersect : Set<'T> → Set<'T> → Set<'T>計(jì)算這兩個(gè)集合的交集。
intersectMany : seq<Set<'T>> → Set<'T>計(jì)算的集合的序列的交集。該序列必須是非空的。
isEmpty : Set<'T> → bool返回true如果設(shè)置為空。
isProperSubset : Set<'T> → Set<'T> → bool如果第一個(gè)集合的所有元素都在第二個(gè)元素中,并且第二個(gè)元素中的至少一個(gè)元素不在第一個(gè)元素中,則計(jì)算為true。
isProperSuperset : Set<'T> → Set<'T> → bool如果第二個(gè)集合的所有元素都在第一個(gè)元素中,并且第一個(gè)元素的至少一個(gè)元素不在第二個(gè)元素中,則計(jì)算為true。
isSubset : Set<'T> → Set<'T> → bool如果第一個(gè)集合的所有元素都在第二個(gè)元素中,則計(jì)算為true。
isSuperset : Set<'T> → Set<'T> → bool如果第二個(gè)集合的所有元素都在第一個(gè)元素中,則計(jì)算為true。
iter : ('T → unit) → Set<'T> → unit將給定的函數(shù)應(yīng)用于集合的每個(gè)元素,按照比較函數(shù)的順序。
map : ('T → 'U) → Set<'T> → Set<'U>返回包含施加給定函數(shù)對(duì)輸入集的每個(gè)元素的結(jié)果的新的集合。
maxElement : Set<'T> → 'T返回被用于該組中按照排序集合中的最高的元素。
minElement : Set<'T> → 'T返回被用于集在根據(jù)排序的集合中的最低元素。
ofArray : 'T array → Set<'T>創(chuàng)建一組包含相同元素作為給定的數(shù)組。
ofList : 'T list → Set<'T>創(chuàng)建一組包含相同元素作為給定的列表。
ofSeq : seq<'T> → Set<'T>創(chuàng)建從給定的枚舉對(duì)象一個(gè)新的集合。
partition : ('T → bool) → Set<'T> → Set<'T> * Set<'T>將集合拆分為兩個(gè)集合,其中包含給定謂詞分別返回true和false的元素。
remove : 'T → Set<'T> → Set<'T>返回一個(gè)新集合,其中刪除了給定元素。 如果集合不包含給定元素,則不會(huì)引發(fā)異常。
singleton : 'T → Set<'T>包含給定元素的集合。
toArray : Set<'T> → 'T array創(chuàng)建包含在順序集合的元素的數(shù)組。
toList : Set<'T> → 'T list創(chuàng)建包含在順序集合的單元的明細(xì)表。
toSeq : Set<'T> → seq<'T>返回集合的有序觀為枚舉對(duì)象。
union : Set<'T> → Set<'T> → Set<'T>計(jì)算兩組的聯(lián)合。
unionMany : seq<Set<'T>> → Set<'T>計(jì)算的一組序列的結(jié)合。

下面的例子演示了上述一些功能的使用 

let a = Set.ofSeq [ 1 ..2.. 20 ]
let b = Set.ofSeq [ 1 ..3 .. 20 ]
let c = Set.intersect a b
let d = Set.union a b
let e = Set.difference a b

printfn "Set a: "
Set.iter (fun x -> printf "%O " x) a
printfn""

printfn "Set b: "
Set.iter (fun x -> printf "%O " x) b
printfn""

printfn "Set c = set intersect of a and b : "
Set.iter (fun x -> printf "%O " x) c
printfn""

printfn "Set d = set union of a and b : "
Set.iter (fun x -> printf "%O " x) d
printfn""

printfn "Set e = set difference of a and b : "
Set.iter (fun x -> printf "%O " x) e
printfn""

當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出 

Set a:
1 3 5 7 9 11 13 15 17 19
Set b:
1 4 7 10 13 16 19
Set c = set intersect of a and b :
1 7 13 19
Set d = set union of a and b :
1 3 4 5 7 9 10 11 13 15 16 17 19
Set e = set difference of a and b :
3 5 9 11 15 17
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)