- F# 基础教程
- F# - 首页
- F# - 概述
- F# - 环境设置
- F# - 程序结构
- F# - 基本语法
- F# - 数据类型
- F# - 变量
- F# - 运算符
- F# - 决策
- F# - 循环
- F# - 函数
- F# - 字符串
- F# - 可选项
- F# - 元组
- F# - 记录
- F# - 列表
- F# - 序列
- F# - 集合
- F# - 映射
- F# - 判别联合
- F# - 可变数据
- F# - 数组
- F# - 可变列表
- F# - 可变字典
- F# - 基本 I/O
- F# - 泛型
- F# - 委托
- F# - 枚举
- F# - 模式匹配
- F# - 异常处理
- F# - 类
- F# - 结构体
- F# - 运算符重载
- F# - 继承
- F# - 接口
- F# - 事件
- F# - 模块
- F# - 命名空间
F# - 集合
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]
集合的基本操作
下表显示了集合的基本操作:
| 值 | 描述 |
|---|---|
| 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
广告