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 であるため、手の込んだ Union や Intersect などはありません)。

注:2つの辞書が等しいかどうかを確認する方法はすでにわかっています。重複を見つけてマージしたいと思います。

4

1 に答える 1

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、アイテムを保存し、後で検索して削除するためにパフォーマンスが大幅に低下します。

于 2013-02-17T07:03:58.000 に答える