2013-02-17 134 views
0

我有一個類,它有一個存儲字符串值的字典和一個存儲無符號64位整數的列表。如果它們的字典包含相同的鍵和值,則該類被認爲與另一個相同類的類相等。查找列表中的重複項和合並項

我也有一個包含這個類的幾個實例的靜態列表。我想檢查這個列表中是否有重複的項目。如果有重複,我想合併它們的列表。

下面是一個僞代碼,我想:

foreach (var item in StaticList) 
{ 
    if (item.Equals(anotherItem)) // i.e., dictionaries are equal 
    { 
     item.UInt64List.AddRange(anotherItem.UInt64List); 
     StaticList.Remove(anotherItem); 
    } 
} 

我怎麼能做到這一點,而不訴諸通過最新的框架添加的功能(我的目標框架是.NET 2.0,所以沒有花哨的聯盟,相交,等等。)?

注意:我已經想出瞭如何檢查兩個字典是否相等,我想查找重複項併合並它們。

回答

0

您必須將所有項目相互比較。

for (int i = 0; i < StaticList.Length-1; i++) 
{ 
    var item = StaticList[i]; 
    for (int j = i+1; j < StaticList.Length;) 
    { 
     var anotherItem = StaticList[j]; 
     if (item.Equals(anotherItem)) // i.e., dictionaries are equal 
     { 
      item.UInt64List.AddRange(anotherItem.UInt64List); 
      StaticList.RemoveAt(j); // it has better performance compared to `StaticList.Remove(anotherItem);` 
     } 
     else 
      j++; 
    } 
} 

我不推薦使用foreach循環,因爲你不能修改迭代過程中的列表,你必須把項目的另一份名單,後來將其刪除,這帶來了很多性能損失的物品存放和稍後搜索刪除。