我最近几次遇到这些术语,但我很困惑它们是如何工作的以及它们何时被实施?
可能重复:
Javascript关联数组的长度
hash_table = {a: 131, b: 222, c:313}
Run Code Online (Sandbox Code Playgroud)
长度方法当然不起作用,因为它会与密钥混淆.
那我该怎么做?
如何在C#中将HashTable转换为Dictionary?可能吗?例如,如果我在HashTable中有对象集合,并且如果我想将其转换为具有特定类型的对象的字典,该怎么做?
我需要在C++中使用面向性能的哈希函数实现来实现我将要编码的哈希表.我已经环顾四周,只发现了一个问题,询问什么是"一般"的好散列函数.我已经考虑过CRC32(但在哪里可以找到很好的实现?)和一些加密算法.不过,我的桌子有非常具体的要求.
这是表格的样子:
100,000 items max
200,000 capacity (so the load is 0.5)
hashing a 6-character string which is a part of English sentence
examples: "become" "and he" ", not "
Run Code Online (Sandbox Code Playgroud)
的首要任务我哈希表的是快速搜索(检索).快速插入并不重要,但它会伴随快速搜索.删除并不重要,重新哈希不是我要研究的东西.为了处理冲突,我可能会使用这里描述的单独链接.我已经看过这篇文章了,但是想要对那些曾经处理过这样的任务的人提出意见.
如果密钥是某个密钥,我正试图从我的字典中删除密钥.
parameterList是一个 dictionary<string,string>
parameterList.Remove(parameterList.Where(k => String.Compare(k.Key, "someKeyName") == 0));
Run Code Online (Sandbox Code Playgroud) 我意识到C#和.NET通常已经有了Hashtable和Dictionary类.
任何人都可以在C#中演示Hashtable的实现吗?
更新:为了澄清,我不是必须寻找一个完整的实现,只是一个哈希表的核心功能的例子(即添加,删除,按键查找).
如JDK文档中所述,Hashtable不允许使用null键或值.HashMap允许一个空键和任意数量的空值.为什么是这样?
我正在尝试编写一个使用哈希表来存储不同单词的C程序,我可以使用一些帮助.
首先,我创建一个哈希表,其中素数的大小最接近我必须存储的单词的数量,然后我使用哈希函数来查找每个单词的地址.我从最简单的功能开始,将字母加在一起,结果是88%的碰撞.然后我开始尝试该功能,发现无论我改变它,碰撞都不会低于35%.现在我正在使用
unsigned int stringToHash(char *word, unsigned int hashTableSize){
unsigned int counter, hashAddress =0;
for (counter =0; word[counter]!='\0'; counter++){
hashAddress = hashAddress*word[counter] + word[counter] + counter;
}
return (hashAddress%hashTableSize);
}
Run Code Online (Sandbox Code Playgroud)
这只是我提出的随机功能,但它给了我最好的结果 - 大约35%的碰撞.
过去几个小时我一直在阅读有关散列函数的文章,我尝试使用一些简单的函数,比如djb2,但是所有这些都给了我更糟糕的结果.(djb2导致了37%的碰撞,这是'更糟糕的是,但我期待更好而不是更糟糕的事情)我也不知道如何使用其他更复杂的一些,例如murmur2,因为我不知道参数是什么(关键,len ,种子)他们接受了.
即使使用djb2,或者我做错了什么,获得超过35%的碰撞是正常的吗?什么是关键,len和种子价值?
如果我们从Java角度看,那么我们可以说hashmap查找需要恒定的时间.但内部实施呢?对于不同的匹配键,它仍然必须搜索特定的桶(对于哪个键的哈希码匹配).那么为什么我们说hashmap查找需要恒定的时间?请解释.
我正在使用Swift 2并使用WeakContainer作为存储一组弱对象的方式,就像 NSHashTable.weakObjectsHashTable()
struct WeakContainer<T: AnyObject> {
weak var value: T?
}
public protocol MyDelegate : AnyObject {
}
Run Code Online (Sandbox Code Playgroud)
然后在我的ViewController中,我声明
public var delegates = [WeakContainer<MyDelegate>]
Run Code Online (Sandbox Code Playgroud)
但这是错误的
使用MyDelegate作为符合协议AnyObject的具体类型不受支持
我看到的错误是,WeakContainer具有value声明为成员weak,因此T有望成为对象.但我也声明MyDelegate为AnyObject也.怎么解决这个问题?