知识卡片

字典键必须可散列

专业/工作 · 744

内容

Swift的Dictionary对键类型唯一的硬性要求是”可散列”(Hashable):类型必须能提供一种机制保证任意两个不同的键可以被区分、唯一定位。这与Array形成对照——数组按位置排序访问,不要求元素类型有任何特殊能力;字典放弃了顺序,换来通过键直接定位值的能力,而这种定位能力的代价就是键类型必须能被散列。StringInt等基础类型天然满足这个要求,所以字面量语法能直接使用它们做键;自定义类型要用作字典键,则必须显式实现Hashable。发散:这体现了容器类型选择的一般规律——放弃某种约束(这里是顺序)通常是为了换取另一种能力(这里是O(1)量级的按键查找),没有免费的设计。

参考来源

《Swift编程权威指南》第10章《字典》