Swift:为什么Dictionary中的键类型必须是Hashable类型

时间:2018-05-01 14:24:21

标签: swift dictionary nsdictionary hashable equatable

如果我想创建Dictionary<Key:Value>()Key类型对象需要协议Hashable。为什么会这样,字典是如何实现的?

我的意思是我理解,如果Key只需要符合Equatable类型的协议,因为程序必须搜索相关值,但是,额外的{{1}与var hashValue: Int一起出现的内容有点令人困惑

1 个答案:

答案 0 :(得分:1)

Hashable键使字典插入和查找更有效,尤其是对于大型字典。

如果密钥不可用,为了找到一个特定的密钥,你必须(在最坏的情况下)读取并比较字典中所有密钥的相等性。

Hashable密钥通过哈希值自然地划分为桶,并且为了找到特定的密钥,您可以计算其哈希以确定它所在的桶,那么您只需要比较属于它的相等密钥桶。如果正确选择了散列函数并且字典中的元素数量小于最大Int值,则每个存储桶只有一个密钥,因此使查找与O一样高效( 1)。

this related question中有更多信息。