美文网首页
Swift中字典的学习笔记

Swift中字典的学习笔记

作者: 流星大石头 | 来源:发表于2017-01-03 10:32 被阅读6次
    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中字典的学习笔记

          本文链接:https://www.haomeiwen.com/subject/bpigvttx.html