在Swift中实现哈希表?
我正在尝试用Swift实现一个哈希表。根据我的理解,散列值被用作数组中要使用的索引。问题是哈希值是非常大的数字,例如在Swift中实现哈希表?,swift,hashtable,hashcode,Swift,Hashtable,Hashcode,我正在尝试用Swift实现一个哈希表。根据我的理解,散列值被用作数组中要使用的索引。问题是哈希值是非常大的数字,例如 "1" => 4,799,450,059,485,597,623 "2" => 4,799,450,059,485,597,624 "3" => 4,799,450,059,485,597,629 使用这些散列值生成数组索引的正确方法是什么 class HashTable <K: Hashable, V> { private var va
"1" => 4,799,450,059,485,597,623
"2" => 4,799,450,059,485,597,624
"3" => 4,799,450,059,485,597,629
使用这些散列值生成数组索引的正确方法是什么
class HashTable <K: Hashable, V> {
private var values : [V?]
init(size: Int) {
values = [V?](count: size, repeatedValue: nil)
}
func push(key: K, value: V?) {
values[key.hashValue] = value
}
subscript (key: K) -> V? {
get {
return values[key.hashValue]
}
set {
push(key, value: newValue)
}
}
}
类哈希表{
私有变量值:[V?]
初始化(大小:Int){
值=[V?](计数:大小,重复值:零)
}
功能推送(键:K,值:V?){
值[key.hashValue]=值
}
下标(键:K)->V{
得到{
返回值[key.hashValue]
}
设置{
推送(键,值:newValue)
}
}
}
我最终在数组中存储LinkedNodes,而不是值
hashIndex = hashValue % values.count
当搜索或删除LinkedList中的多个节点时,我直接比较HashValue,而不是hashIndex。(手柄碰撞)
想知道是否有更好的解决方案Swift字典是一个哈希表,那么将其重新实现为数组有什么好处?(特别是考虑到Swift没有稀疏阵列的事实…@matt我知道,实现自己的阵列的优势在于了解它们是如何工作的。我的代码不是创建了一个稀疏数组吗?[V?](count:size,repeatedValue:nil)一个特定大小的数组,默认值为nil。这篇文章似乎解决了这个问题,您可以通过下面的链接了解这可能会有所帮助: