public class TestObject
{
string TestValue { get; set; }
bool IsDuplicate { get; set; }
}
List<TestObject> testList = new List<TestObject>
{
new TestObject { TestValue = "Matt" },
new TestObject { TestValue = "Bob" },
new TestObject { TestValue = "Alice" },
new TestObject { TestValue = "Matt" },
new TestObject { TestValue = "Claire" },
new TestObject { TestValue = "Matt" }
};
testList
は実際に何百万ものオブジェクトが長いと想像してください。C# - 重複を見つけるためにコレクションを比較する最速の方法
TestObjects
とTestValue
の3つのうち2つがIsDuplicate
に設定されていることを確認する最速の方法は何ですか?与えられた値のインスタンスがどのように存在しても、IsDuplicateがfalseのプロセスから出てくるのは1つだけです。
スレッドを使用してこれを行うのは嫌です。また、別のコレクション型に変換する方がリストが高速である場合でも、コレクションはリストである必要はありません。
私は重複したものを保持し、それらをマークしてコレクションから削除しないでください。
これを展開するには、はるかに複雑な問題の簡単な表現を想像してみてください。問題のオブジェクトには、既に注文する順序があります。
正確な文字列の等価性で最初の複製をマッチングした後、私はコレクションをもう一度戻って、ファジーマッチングロジックを使用して残りの部分を再試行する必要があります。このプロセスの開始時に存在するコレクションは、重複排除中またはその後では変更されません。
最終的に元のコレクションがファイルに書き出され、おそらく重複がフラグされます。
私は確信していませんが、別のTestObjectエンティティが必要な場合は、HashSetを使用してください。特定のタイプの一意のインスタンスだけを含むように作られているので、あなたに最高のサービスを提供します。 – Anatolyevich
私は同じ@Anatolyevichを考えていましたが、コレクションに複製物を入れて複製物に印を付けることはできません。私はそれがOPが望んだものと仮定しています。 – Draken
@ Nasreddineは急いで擬似コードを書きました:)そして、私は重複を保ち、それらに印を付ける必要があります。 –