我偶然發現一些將字符串添加到列表的代碼,但在添加它之前對值進行哈希處理。將密鑰添加到列表或集合 - 在添加密鑰之前散列密鑰是否有任何價值
它對字符串值使用MD5散列(MD5CryptoServiceProvider),然後將其添加到列表中。
有沒有什麼價值在這樣做的速度方面來找到列表中的關鍵或者這只是不必要的?
我偶然發現一些將字符串添加到列表的代碼,但在添加它之前對值進行哈希處理。將密鑰添加到列表或集合 - 在添加密鑰之前散列密鑰是否有任何價值
它對字符串值使用MD5散列(MD5CryptoServiceProvider),然後將其添加到列表中。
有沒有什麼價值在這樣做的速度方面來找到列表中的關鍵或者這只是不必要的?
首先,列表(List<T>
)沒有「鍵」。但是,Dictionary<TKey, TValue>
呢。
其次,爲了回答你的表現問題:不,實際上在計算散列時存在性能懲罰。但是,在您跳到不必要的結論之前,請檢查周圍的代碼,並考慮作者是否真的需要MD5哈希表而不是字符串本身?第三,如果您需要高效地查找某些內容,則可以使用HashSet<T>
(如果您只需檢查它的存在);如果需要將您查找的鍵與值相關聯,則可以使用Dictionary<TKey, TValue>
()。
如果將字符串放在字典或散列集中,C#將從您放入的任何字符串中生成散列值。這通常使用比MD5快得多的散列算法。
如果目標是提高性能,我認爲不需要爲List
這樣做。字符串是字符串,並且以相同的方式查看它們是否被散列。
我不會假設您知道您查看的代碼的作者是在用他們的列表進行操作。但是我會說,如果你有一個很大的名單,搜索的性能很關鍵,那麼這裏有一個類。 HashSet<T>
將很好地滿足您的需求。