查找重复项并合并列表中的项

本文关键字:列表 合并 查找 | 更新日期: 2023-09-27 17:59:39

我有一个类,它有一个存储字符串值的字典和一个存储无符号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,所以没有花哨的Union、Intersect等),我该如何做到这一点?

注意:我已经想好了如何检查两个字典是否相等,我想找到重复的字典并将它们合并。

查找重复项并合并列表中的项

您必须将所有项目相互比较。

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循环,因为在迭代过程中无法修改列表,并且必须将项目放在另一个列表中,然后再删除它们,这会对存储项目和稍后搜索以删除项目造成很大的性能损失。