【发布时间】:2018-05-01 14:24:21
【问题描述】:
如果我想创建一个Dictionary<Key:Value>(),则需要Key 类型对象到协议Hashable。为什么会这样,字典是如何实现的?
我的意思是我会理解,如果Key 只需要符合Equatable 类型的协议,因为程序将不得不搜索相关值,但是,额外的var hashValue: Int 随之而来Hashable 有点混乱
【问题讨论】:
-
提示:字典是一个哈希映射。
-
这不是一个 Swift 问题,而是一个一般的编程问题。根据定义,字典是一种数据结构,它使用键的哈希值来定位它们的值。
-
@rmaddy 更有意义 :-) 为什么他们称它为字典?应该称它为类似于 Java 的 HashMap
-
@BallpointBen 字典(通用计算数据结构,也称为关联数组)不需要使用哈希来查找值,它比那个更通用。字典是键值对的集合,您只需拥有适当的键即可使用它们来存储和查找值。哈希部分是一种优化,通过将字典实现为哈希映射来提供更快的查找时间。它可以很容易地成为一个搜索树型结构。
-
而“搜索树型结构”将要求元素为
Comparable而不是Hashable。每个都有其权衡。 OP:如果您正在寻找使用Equatable键的关联数据类型,请参阅DictionaryLiteral,它基本上只是Array<(Key: Equatable, Value)>的包装器
标签: swift dictionary nsdictionary hashable equatable