【问题标题】:Adding keys to a list or collection - is there any value in hashing the key before adding it将键添加到列表或集合 - 在添加键之前散列键是否有任何价值
【发布时间】:2011-04-13 20:02:34
【问题描述】:

我偶然发现了一些将字符串添加到列表但在添加之前对值进行哈希处理的代码。

它在字符串值上使用 MD5 哈希 (MD5CryptoServiceProvider),然后将其添加到列表中。

就在列表中找到键的速度而言,这样做是否有任何价值,或者这只是不必要的?

【问题讨论】:

    标签: c# string list hash hashtable


    【解决方案1】:

    如果目标是提高性能,我认为没有必要为 List 执行此操作。字符串是字符串,无论是否经过哈希处理,都以相同的方式查找。

    【讨论】:

      【解决方案2】:

      我不会假设知道您正在查看的代码的作者对他们的列表做了什么。但我会说,如果你有一个很大的列表并且搜索性能很关键,那么就有一个类。 HashSet<T> 将很好地满足您的需求。

      【讨论】:

        【解决方案3】:

        首先,列表 (List<T>) 没有“键”。但是,Dictionary<TKey, TValue> 可以。

        其次,回答您的性能问题:不,在计算该哈希时实际上存在性能惩罚。但是,在您得出不必要的结论之前,请检查周围的代码并考虑作者是否实际上需要 MD5 哈希和而不是字符串本身?

        第三,如果您需要高效地查找某些内容,您可以使用HashSet<T>(如果您只需要检查它是否存在)或Dictionary<TKey, TValue>(如果您需要将您查找的键与值相关联)。

        如果您将字符串放入字典或哈希集中,C# 将已经从您输入的任何字符串生成哈希值。这通常使用比 MD5 快得多的哈希算法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-27
          • 1970-01-01
          • 2017-06-16
          相关资源
          最近更新 更多