Swift Set 定义、创建

优质
小牛编辑
128浏览
2023-12-01

Swift 5.x Set 定义、创建

1. 创建Set


  • 1.1 使用初始化器语法来创建一个确定类型的空Set
let letters = Set<Character>()
  • 1.2 使用数组字面量创建Set
var letters: Set<String> = ["Math", "English", "History"]

注: 如果不指定类型为Set, 默认初始化的是数组

2. Set 类型的哈希值


  • 为了能让类型储存在Set当中, 他必须是可哈希的, 就是说类型必须提供计算它自身哈希值的方法.
  • 所有Swift的基础类型(比如String, Int, DoubleBool)默认都是可哈希的, 并且可以用于Set或者Dictionary的键

e.g.

struct Person {
    var name: String = ""
    var age: Int = 0
}
var personSet = Set<Person>()  -->`Type 'Person' does not conform to protocol 'Hashable'`

注意此时在初始化这个Set的时候, 编译器会提示错误: Type 'Person' does not conform to protocol 'Hashable'

遵循Hashable协议后, 警告消失

struct Person: Hashable {
    var name: String = ""
    var age: Int = 0
}
var personSet = Set<Person>()

通过extension

struct Person {
    var name: String = ""
    var age: Int = 0
}
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: 25))
personSet.insert(Person(name: "zhangsan", age: 25))
print(personSet)