F# - 集合(Sets)

F# - 集合(Sets) 首页 / F#入门教程 / F# - 集合(Sets)

F#中的集合(Sets)是一种数据结构,它是无序的。

创建集合

可以通过以下方式创建集-

  • 通过使用Set.empty创建一个空集,并使用添加功能添加项。
  • 将序列和列表转换为集合。

以下程序演示了这些技术-

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

编译并执行程序时,将产生以下输出-

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]

基本操作

下表显示了集合的基本操作-

链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-sets.html

来源:LearnFk无涯教程网

Value 描述
add : 'T → Set<'T> → Set<'T> 返回一个新集合,其中添加了一个元素。如果集合已经包含给定元素,则不会引发异常。
contains : 'T → Set<'T> → bool 如果给定元素在给定集中,则计算为true。
count : Set<'T> → int 返回集合中元素的数量。
difference : Set<'T> → Set<'T> → Set<'T> 返回一个新集合,其中第二集合的元素已从第一集合中删除。
empty : Set<'T> 指定类型的空集。
exists : ('T → bool) → Set<'T> → bool 测试集合中的任何元素是否满足给定谓词。
filter : ('T → bool) → Set<'T> → Set<'T> 返回一个仅包含给定谓词返回true的集合元素的新集合。
fold : ('State → 'T → 'State) → 'State → Set<'T> → 'State 将给定的累加函数应用于集合的所有元素。
foldBack : ('T → 'State → 'State) → Set<'T> → 'State → 'State 将给定的累加函数应用于集合的所有元素。
forall : ('T → bool) → Set<'T> → bool 测试集合的所有元素是否满足给定谓词。如果输入函数为p并且元素为i0 ... iN,则此函数将计算p i0 && ... && p iN。
intersect : Set<'T> → Set<'T> → Set<'T> 计算两个集合的交集。
intersectMany : seq<Set<'T>> → Set<'T> 计算集合序列的交集。序列必须为非空。
isEmpty : Set<'T> → bool 如果集合为空,则返回true。
isProperSubset : Set<'T> → Set<'T> → bool 如果第一个集合的所有元素都在第二个元素中,而第二个集合中的至少一个元素不在第一个元素中,则评估为true。
isProperSuperset : Set<'T> → Set<'T> → bool 如果第二组的所有元素都在第一组中,而第一组的至少一个元素不在第二组中,则评估为true。
isSubset : Set<'T> → Set<'T> → bool 如果第一组的所有元素都在第二组中,则评估为true。
isSuperset : Set<'T> → Set<'T> → bool 如果第二组的所有元素都在第一组中,则评估为true。
iter : ('T → unit) → Set<'T> → unit 将给定函数按比较函数的顺序应用于集合的每个元素。
map : ('T → 'U) → Set<'T> → Set<'U> 返回一个新集合,其中包含将给定函数应用于输入集的每个元素的结果。
maxElement : Set<'T> → 'T 根据用于集合的顺序返回集合中的最高元素。
minElement : Set<'T> → 'T 根据用于集合的顺序返回集合中的最低元素。
ofArray : 'T array → Set<'T> 创建一个包含与给定数组相同元素的集合。
ofList : 'T list → Set<'T> 创建一个包含与给定列表相同元素的集合。
ofSeq : seq<'T> → Set<'T> 从给定的可枚举对象创建一个新的集合。
partition : ('T → bool) → Set<'T> → Set<'T> * Set<'T> 将集合分为两个集合,其中包含给定谓词分别返回true和false的元素。
remove : 'T → Set<'T> → Set<'T> 返回移除给定元素的新集合。如果集合不包含给定元素,则不会引发异常。
singleton : 'T → Set<'T> 包含给定元素的集合。
toArray : Set<'T> → 'T array 创建一个按顺序包含集合元素的数组。
toList : Set<'T> → 'T list 创建一个按顺序包含集合元素的列表。
toSeq : Set<'T> → seq<'T> 返回集合的有序视图作为可枚举的对象。
union : Set<'T> → Set<'T> → Set<'T> 计算两个集合的并集。
unionMany : seq<Set<'T>> → Set<'T> 计算集合集的并集。

以下示例演示了上述某些功能的用法-

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

编译并执行程序时,将产生以下输出-

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

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

React实战进阶45讲 -〔王沛〕

算法面试通关40讲 -〔覃超〕

零基础学Java -〔臧萌〕

ZooKeeper实战与源码剖析 -〔么敬国〕

Netty源码剖析与实战 -〔傅健〕

架构实战案例解析 -〔王庆友〕

分布式数据库30讲 -〔王磊〕

PPT设计进阶 · 从基础操作到高级创意 -〔李金宝(Bobbie)〕

程序员职业规划手册 -〔雪梅〕

好记忆不如烂笔头。留下您的足迹吧 :)