Sets
优质
小牛编辑
127浏览
2023-12-01
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" 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]
集合的基本操作
下表显示了集合的基本操作 -
值 | 描述 |
---|---|
添加:'T→设置→设置 | 返回一个新元素集,其中添加了一个元素。 如果集合已包含给定元素,则不会引发异常。 |
包含:'T→设置→布尔 | 如果给定元素在给定集合中,则求值为true 。 |
count:设置→int | 返回集合中的元素数。 |
差异:设置→设置→设置 | 返回一个新集合,其中第二个集合的元素从第一个集合中删除。 |
空:设置 | 指定类型的空集。 |
存在:('T→bool)→设置→布尔 | 测试集合中的任何元素是否满足给定的谓词。 如果输入函数是谓词且元素是i0 ... iN,则此函数计算谓词i0或...或谓词iN。 |
filter:('T→bool)→Set →Set | 返回一个新集合,该集合仅包含给定谓词返回true的集合元素。 |
fold:('State→'T→'State)→'State→Set →'State | 将给定的累积函数应用于集合的所有元素。 |
foldBack :('T→'州→'州)→设置→'州→'州 | 将给定的累积函数应用于集合的所有元素。 |
forall:('T→bool)→设置→布尔 | 测试集合的所有元素是否满足给定的谓词。 如果输入函数是p并且元素是i0 ... iN,则此函数计算p i0 && ... && p iN。 |
相交:设置→设置→设置 | 计算两组的交集。 |
intersectMany:seq >→Set | 计算一系列集合的交集。 序列必须是非空的。 |
isEmpty:设置→布尔 | 如果集合为空,则返回true 。 |
isProperSubset:设置→设置→布尔 | 如果第一组的所有元素都在第二组中,并且第二组中的至少一个元素不在第一组中,则求值为true 。 |
isProperSuperset:设置→设置→布尔 | 如果第二组的所有元素都在第一组中,并且第一组中的至少一个元素不在第二组中,则求值为true 。 |
isSubset:设置→设置→布尔 | 如果第一组的所有元素都在第二组中,则求值为true 。 |
isSuperset:设置→设置→布尔 | 如果第二组的所有元素都在第一组中,则求值为true 。 |
iter:('T→unit)→设置→单位 | 根据比较函数按顺序将给定函数应用于集合的每个元素。 |
map:('T→'U)→设置→设置 | 返回一个新集合,其中包含将给定函数应用于输入集的每个元素的结果。 |
maxElement:设置→'T | 根据用于集合的排序返回集合中的最高元素。 |
minElement:设置→'T | 根据用于集合的排序返回集合中的最低元素。 |
ofArray:'T array→Set | 创建一个包含与给定数组相同元素的集合。 |
ofList:'T list→Set | 创建一个包含与给定列表相同元素的集合。 |
ofSeq:seq →设置 | 从给定的可枚举对象创建新集合。 |
分区:('T→bool)→设置→设置 *设置 | 将集合拆分为两个集合,其中包含给定谓词分别返回true和false的元素。 |
删除:'T→设置→设置 | 返回删除了给定元素的新集合。 如果集合不包含给定元素,则不会引发异常。 |
单身:'T→设置 | 包含给定元素的集合。 |
toArray:设置→'T数组 | 创建一个按顺序包含集合元素的数组。 |
toList:设置→'T列表 | 按顺序创建包含集合元素的列表。 |
toSeq:设置→seq | 以可枚举对象的形式返回集合的有序视图。 |
union:设置→设置→设置 | 计算两个集合的并集。 |
unionMany:seq >→Set | 计算一系列集合的并集。 |
以下示例演示了上述某些功能的用法 -
例子 (Example)
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