我偶然发现了一些代码,这些代码将字符串添加到List中,但在添加之前对值进行散列。
它在字符串值上使用MD5哈希(MD5CryptoServiceProvider),然后将其添加到列表中。
在速度方面是否有任何价值可以在列表中找到密钥,或者这只是不必要的?
答案 0 :(得分:1)
我不打算知道您正在查看的代码的作者是如何处理他们的列表的。但我要说的是,如果你有一个大型列表并且搜索性能至关重要,那么就有一个类。 HashSet<T>
很适合您的需求。
答案 1 :(得分:0)
如果目标是提高性能,我认为没有必要为List
执行此操作。字符串是字符串,无论它们是否经过哈希处理都以相同的方式查找。
答案 2 :(得分:0)
首先,列表(List<T>
)没有“键”。但是,Dictionary<TKey, TValue>
可以。
其次,回答你的性能问题:不,在计算哈希时实际上存在性能惩罚。但是,在你得出不必要的结论之前,检查一下周围的代码并考虑作者是否真的需要MD5 hashsum而不是字符串本身?
第三,如果你需要有效地查找某些内容,你可以使用HashSet<T>
,如果你只是需要检查它的存在,或Dictionary<TKey, TValue>
如果你需要关联你查找的键价值。
如果将字符串放在字典或散列集中,C#就会从您放入的任何字符串生成散列值。这通常使用比MD5快得多的散列算法。