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" }
};
Stellen Sie sich vor, testList
ist eigentlich Millionen von Objekten lang.C# - schnellste Möglichkeit, eine Sammlung mit sich selbst zu vergleichen, um Duplikate zu finden
Was ist der schnellste Weg, um sicherzustellen, dass zwei dieser drei TestObjects
mit TestValue
von Matt seine IsDuplicate
auf wahr gesetzt wird? Unabhängig davon, wie viele Instanzen eines bestimmten Werts vorhanden sind, sollte nur einer mit IsDuplicate von false aus dem Prozess herauskommen.
Ich bin nicht abgeneigt, dies über Threading zu tun. Und die Sammlung muss keine Liste sein, wenn die Konvertierung in einen anderen Sammlertyp schneller ist.
Ich muss Duplikate aufbewahren und sie als solche markieren, nicht aus der Sammlung entfernen.
Um zu erweitern, ist dies (wie Sie sich vorstellen können) ein einfacher Ausdruck eines viel komplexeren Problems. Die betreffenden Objekte haben bereits eine Ordnungszahl, mit der ich sie ordnen kann.
Nachdem ich die ursprünglichen Duplikate auf die exakte String-Gleichheit abgeglichen habe, muss ich erneut durch die Sammlung gehen und den Rest mit einer Fuzzy-Matching-Logik wiederholen. Die zu Beginn dieses Prozesses vorhandene Sammlung wird während der Deduplizierung oder danach nicht geändert.
Schließlich wird die ursprüngliche Sammlung in eine Datei geschrieben werden, mit wahrscheinlich gekennzeichneten Duplikaten.
Ich bin nicht sicher, ob das der Fall ist, aber wenn Sie nur verschiedene TestObject-Entitäten benötigen, dann verwenden Sie HashSet. Es wird Ihnen am besten dienen, da es nur eindeutige Instanzen eines bestimmten Typs enthält. – Anatolyevich
Ich dachte das gleiche @Anatolyevich, aber es erlaubt nicht die Sammlung, das Duplikat zu enthalten und die Duplikate zu markieren. Ich gehe davon aus, dass das der OP wollte. – Draken
@Nasreddine hastig Pseudocode gekritzelt :) Und ja, ich muss doppelte und markieren Sie sie. –