定义和创建
SET的概念
- Set是指具有某种特性的具体的活抽象的对象汇总而成的集体。其中,构成Set的这些对象则称为该Set的元素。
集合的三个特性
- 确定性:给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一。
- 互斥性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。
- 无序性:一个集合中,每个元素的地位都是相同的,元素之间是无序的。
创建Set
- 使用初始化器语法垃圾创建一个确定类型的空Set
- 使用数组字面量创建Set
```swift
var letters = Set
() letters.insert(“c”) print(letters) //输出 [“c”]
var course: Set
<a name="SxzVu"></a>
## Set类型的哈希值
- 为了能让类型存储在Set当中,它必须是可哈希的--就是说类型必须提供计算它自身哈希值的方法。
- 所有Swift的基础类型(比如String,Int,Double,和Bool)默认都是可哈希的,并且可以用于Set或者Dictionary的键。
- 自定义类型需要实现Hashable协议。
```swift
struct Person {
var name: String
var age: Int
}
extension Person: Hashable {
func hash(into hasher: inout Hasher) {
hasher.combine(name)
hasher.combine(age)
}
}
var personSet = Set<Person>()
personSet.insert(Person(name: "zhangsan", age: 28))
访问和修改Set
遍历Set
- 可以使用For-in遍历Set。
- 因为Set是无序的,如果要顺序有序的遍历Set,可以使用sorted()方法。 ```swift let courses: Set = [“Math”, “English”, “History”] for course in courses { print(course) } print(“—————-“) for course in courses.sorted() { print(course) }
/*输出 English History
Math
English History Math */
<a name="EjftR"></a>
## 访问Set
- 使用count获取Set里元素个数
- 使用isEmpty判断Set是否为空
```swift
let set: Set<Character> = ["A", "B", "C"]
print(set.count)
print(set.isEmpty)
//输出
//3
//false
下课铃声)
(忽而今夏)
可是你还记得吗
那年盛夏
那个傻瓜
说的傻话
陪着你回家
陪着你长大
每天都记得打电话
可是你还记得吗
那道晚霞
最后一次
送你回家
我没有讲话
因为怕眼泪落下
夏天白昼明治的红豆
一口沁甜了倦意感受
有风经过海面上踟蹰
倏尔带走你梦里的忐忑(1)
可嗅到仲夏柠叶香
你莞尔的笑
身旁青色的柠檬微荡(1)
我明了害羞地彷徨
仿若青柠的悠扬
到达直通你心门的方向(2)
可嗅到仲夏柠叶香
你莞尔的笑
身旁青色的柠檬微荡
我明了害羞地彷徨
仿若青柠的悠扬
到达直通你心门的方向(合)
冰镇可乐甜甜的芒果
一口拥抱全世界降落
有种诱惑起个名字叫菠萝
看看你梦里有没有七彩虹(🐷)
可嗅到仲夏柠叶香
你莞尔的笑
身旁青色的柠檬微荡(1)
我明了害羞地彷徨
仿若青柠的悠扬
到达直通你心门的方向(1)
可嗅到仲夏柠叶香
你莞尔的笑
身旁青色的柠檬微荡
我明了害羞地彷徨
仿若青柠的悠扬
到达直通你心门的方向(合)
夏天白昼(1)
有风经过(1)
我明了你害羞的彷徨
可嗅到仲夏柠叶香(2)
可嗅到仲夏柠叶香(🐷)
你莞尔的笑(1)
身旁青色的柠檬微荡(1)
我明了害羞地彷徨
仿若青柠的悠扬
摘下星星戴上你的肩膀(合)
(伴奏停)
(下课铃声)