Entfernen von doppelten string aus der Liste (.NET 2.0!)
Habe ich Probleme, das finden der effizienteste Weg, um entfernen Sie Duplikate aus einer Liste von strings (Listen).
Meine aktuelle Implementierung ist eine doppelte foreach-Schleife prüfen die Anzahl der Instanzen für jedes Objekt nur auf 1, andernfalls entfernen Sie den zweiten.
Ich weiß, es gibt VIELE andere Fragen gibt, aber Sie alle die besten Lösungen müssen vor .net 2.0, das ist die aktuelle build-Umgebung arbeite ich in. (GM und Chrysler sind sehr resistent gegen Veränderungen ... 🙂 )
Diese Grenzen der möglichen Ergebnisse, indem nicht alle LINQ, oder HashSets.
Den code, den ich verwende, ist Visual C++, sondern C# - Lösung gut funktionieren wird, wie gut.
Dank!
InformationsquelleAutor greggorob64 | 2009-08-26
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist wahrscheinlich nicht, was Sie suchen, aber wenn Sie haben die Kontrolle über dieses der effizienteste Weg wäre, um nicht fügen Sie Sie in den ersten Platz...
Haben Sie die Kontrolle über diese? Wenn dem so ist, alles, was Sie würde tun müssen, ist ein
myList.Contains(currentItem)
rufen, bevor Sie das Element hinzufügen und Sie sindKönnen Sie das folgende tun.
Dies hat den Aufwand des Aufbaus einer
Dictionary<TKey,TValue>
Objekt, das dupliziert die Liste der eindeutigen Werte in der Liste. Es ist aber ziemlich effiziente Geschwindigkeit klug.Ich bin kein Comp Sci PhD, aber ich würde stellen Sie sich vor, ein Wörterbuch, mit dem die Elemente in Ihrer Liste der Schlüssel wäre schnell.
Da ein Wörterbuch gestattet keine doppelten Schlüssel, würde man nur einzigartige Zeichenfolgen, die am Ende der iteration.
Denken Sie nur daran, wenn die Bereitstellung einer benutzerdefinierten Klasse zum überschreiben der Equals () - Methode, um für die Contains () - Funktion erforderlich.
Beispiel
Wenn du gehst, die route, die "nur" nicht hinzufügen "dupliziert", dann überprüfen " - Liste.Enthält" vor dem hinzufügen eines Elements funktioniert, aber seine O(n^2), wobei n die Anzahl Zeichenfolgen, die Sie hinzufügen möchten. Seine nicht anders als deine aktuelle Lösung mit zwei verschachtelten Schleifen.
Haben Sie mehr Glück mit einem hashset speichern Artikel, die Sie bereits Hinzugefügt, aber da Sie verwenden .NET 2.0, ein Wörterbuch ersetzen kann, ein hash-set:
Dieser läuft in O(n) und benutzt O(2n) Platz, es wird in der Regel die Arbeit sehr gut für bis zu 100K Artikel. Die tatsächliche Leistung hängt von der durchschnittlichen Länge des strings -- wenn Sie wirklich brauchen, um die maximale Leistung, die Sie ausnutzen können einige mehr leistungsfähige Daten-Strukturen, wie versucht, machen die Einsätze noch schneller.