Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Swift中实现哈希表?_Swift_Hashtable_Hashcode - Fatal编程技术网

在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

我正在尝试用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 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。这篇文章似乎解决了这个问题,您可以通过下面的链接了解这可能会有所帮助: