F#中的一个集合是一个数据结构,它充当项目集合而不保留项目的插入顺序.集合不允许将重复条目插入集合中.
可以通过以下方式创建集合 :
使用Set.empty创建空集并使用add函数添加项.
转换序列和列表到集合.
以下程序演示了技巧 :
(* 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" set22
编译并执行程序时,它会产生以下输出 :
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> | 返回一个新元素集,其中添加了一个元素.如果集合已经包含给定元素,则不会引发异常. |
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 | 测试集合中的任何元素是否满足给定的谓词.如果输入函数是谓词且元素是i0 ... iN,则此函数计算谓词i0或...或谓词iN. |
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