只是想知道:如果我有兩個SortedDictionary對象,找出它們的內容是否相同的最快方法是什麼? 循環所有的鍵和檢查值聽起來不像是最好的解決方案。 只需檢查GetHashCode()就足夠了嗎?SortedDictionary <TKey,TValue>:檢查內容是否等於另一個SortedDictionary?
編輯:我試了一下。看到這個代碼:
SortedDictionary<string, string> o1 = new SortedDictionary<string, string>();
SortedDictionary<string, string> o2 = new SortedDictionary<string, string>();
o1["k1"] = "v1";
o1["k2"] = "v2";
o1["k3"] = "v3";
o2["k2"] = "v2";
o2["k1"] = "v1";
o2["k3"] = "v3";
Console.WriteLine("o1:");
foreach (KeyValuePair<string, string> oKeyValuePair in o1)
{
Console.WriteLine(oKeyValuePair.GetHashCode());
}
Console.WriteLine("o2:");
foreach (KeyValuePair<string, string> oKeyValuePair in o2)
{
Console.WriteLine(oKeyValuePair.GetHashCode());
}
Console.ReadKey();
爲個人鍵值對的散列碼是兩種排序字典一樣的,即使添加值的順序不同。這很好。 所以我錯過了一個步驟:我如何從所有的哈希碼獲得一個唯一的哈希碼?
勒
聽起來很合理,我最終使用了類似的實現。原來,關鍵值對的哈希值可能會改變。謝謝。 – Krumelur 2010-08-18 08:53:35
@Krumelur。實際上,現在看看這個,因爲kvp命令是按排序字典排序的,所以在每個MoveNext之後抓取兩個枚舉器並比較Current會更快。只要你不想考慮使用不同比較器的字典(在這種情況下,排序順序會不同,這種加速將不起作用),這會將第二個字典中相關值的每次搜索減少到O( 1)。我在更廣泛地思考(以上是基於散列的字典或其他不保留排序順序的唯一方法)。 – 2010-08-18 09:26:42