为了简化,假设我有一些唯一的值——从1到10
的数字。
现在我想把1-5
映射到值“first”,并且我希望把6-10
映射到值“second”。
是否有一种方法可以创建或扩展一个字典来实现以下功能?
let dict: [Range<Int> : String]
目标是获得以下结果:
print(dict[1]) // prints first
print(dict[2]) // prints first
print(dict[3]) // prints first
print(dict[7]) // prints second
print(dict[8]) // prints second
print(dict[9]) // prints second
我目前的做法是将多个键映射到同一个值。但我的字典有时可能会有6万个值。所以我想知道是否可以使用范围。
我知道我可以将值变成class
,而不是struct
,这样多个键就可以映射到同一个类对象,但我想知道是否可以简单地创建一个像上面那样工作的字典?
Hashable
协议的实例的哈希值仅用于将keys
放置在不同的桶中(基于哈希值),只有在尝试访问具有多个键的桶时,字典才会继续测试实际正在搜索的唯一键的相等性(所有这些都是为了允许字典通过键进行摊销O(1)访问值)。这意味着(对于理论上扩展到Hashable
的Range
),0...10
是一个唯一的键,1...10
也是一个唯一的键,即使它们的哈希值相同。 - dfrib