2013-02-17 73 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循环,因为你不能修改迭代过程中的列表,你必须把项目的另一份名单,后来将其删除,这带来了很多性能损失的物品存放和稍后搜索删除。