set 是指具有某些特定性质的具体的或抽象的对象汇总而成的集体。其中,构成set的这些对象则称为该set的元素
set 的三个特性
确定性:给定一个集合,任给一个元素,该元素或者属于或不属于该集合,二者必居其一
互斥性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。
无序性:一个集合中,每个元素的地位都是相同的,元素之间是无序的。
swift 的集合类型写做 Set,这里的Element是set 要存储的类型。不同于数组,集合没有定价的简写
创建 Set
使用初始化器语法来创建一个确定类型的空set
使用数组字面量创建set
var letters =Set<Character>()
letters.insert("C")print(letters):["C"]--------------------------var course:Set<String>=["Math","English","History"]
course.insert("History")print(course):["History","Math","English"]
set 类型的哈希值
为了能让类型储存在set中,它必须是可哈希的,即类型必须提供计算它自身哈希值的方法
所有Swift 的基础类型 (比如 String,Int,Double, 和 Bool)默认都是可哈希的,并且可以用于 set 或者 Dictionary 的键
structPerson{var name:Stringvar age:Int}var personSet =Set<Person>()
personSet.insert(Person(name:"zhangsan", age:28))
error:MyPlayground.playground:8:17: error: type 'Person' does not conform to protocol 'Hashable'
var personSet =Set<Person>()^-----------------------// 正确的方法是在 使用Person 结构体之前,添加其扩展extensionPerson:Hashable{funchash(into hasher:inoutHasher){
hasher.combine(name)
hasher.combine(age)}}