Swift中字典的学习笔记

  1. 字典查找将返回的是可选值,当特定建不存在时,下标查询会返回nil。

  2. 字典其实就是哈希表。字典通过键的hashValue来为每个键指定一个位置,以及它所对应的存储。
    标准库中所有的基本数据类型都是遵守Hashable协议的,它们包括字符串、整数、浮点数以及布尔值。不带有关联值的枚举类型也会自动遵守Hashable。
    如果你想要将自定义的类型用作字典的键,那么你必须手动为你的类型添加Hashable并满足它,这需要你实现hashValue属性。
    另外,因为Hashable本身是对Equatable的拓展,因此,还需要实现重载==运算符。

struct Person{
    var name:String
    var zipCode:Int
    var birthday:Date
}

extension Person : Equatable {
    static func == (lhs:Person,rhs:Person)->Bool{
        return lhs.name == rhs.name && lhs.zipCode == rhs.zipCode && lhs.birthday == rhs.birthday
    }
}

extension Person : Hashable {
    var hashValue: Int{
        return name.hashValue*zipCode.hashValue*birthday.hashValue
    }
}

3.当你使用不具有语义的类型作为字典的键时,需要特别小心。如果你在将一个对象用作字典键后,改变了它的内容,它的哈希值和/或相等特性往往会发生改变。这时候你将无法在字典中找到它。这时字典会在错误的位置存储对象,这将倒置字典内部存储错误。对于值类型来说,因为字典的键不会和复制的值公用存储,因此它也不会被从外部改变,所以不存在这个问题。

你可能感兴趣的:(Swift中字典的学习笔记)