eine andere Antwort Hinzufügen einige zusätzliche NFRs zu empfangen, die in den Kommentaren gekommen sind:
- Objekte können durch einen Hash-Code
identifiziert werden
- Die Liste ist sehr groß, so dass die Leistung ein Problem ist
- Die Idee ist es, eine alte Liste mit einer neuen Liste zu vergleichen, um zu sehen, ob neue Hash-Codes aufgetaucht sind.
Sie Ihre Objekte in einem Wörterbuch gespeichert werden soll:
var list = new Dictionary<string, CustomObject>();
Wenn Sie sie hinzufügen, den Hash als Schlüssel zur Verfügung stellen:
list.Add(customObject.Hash, customObject);
für neue zu scannen:
var difference = new List<CustomObject>();
foreach (customObject o in newList)
{
if (oldList.ContainsKey(o.Hash)) difference.Add(o);
}
Log(String.Format("{0} new hashes found.", difference.Count));
Mit dem Dictionary nutzen Sie den Weg t Die Schlüssel werden in einer Hash-Tabelle gespeichert. Ein Element in einer Hash-Tabelle zu finden ist schneller als nur einen Scan & zu vergleichen Art der Sache. Ich glaube, das wird O (n * log (n)) anstelle von O (n^2) sein.
Müssen Sie nur Objektinstanzen vergleichen, oder müssen Sie einen tiefen Vergleich aller Eigenschaften durchführen? –
Ich muss nur den Wert von foo jedes Listeneintrags vergleichen. Ich schätze das zählt dann als tiefvergleich? – CiriousJoker
Ist list1 deine ursprüngliche Liste und list2 ist die aktuelle Liste nach Änderungen und so? Wenn Sie wirklich nachverfolgen möchten, was sich innerhalb einer Liste im Laufe der Zeit geändert hat, ist das eine ganz andere Frage (und eine, die eine einfachere Antwort hat, als zwei Listen zu vergleichen). – PMV