Jeder haben eine schnelle Methode für de-Duplizierung eine generische Liste in C#?
In C# wäre es: List<T> noDupes = new List<T>(new HashSet<T>(list)); list.Clear(); list.AddRange(noDupes);
Jeder haben eine schnelle Methode für de-Duplizierung eine generische Liste in C#?
In Java (ich nehme an, C# ist mehr oder weniger identisch):
list = new ArrayList<T>(new HashSet<T>(list))
Wenn Sie die ursprüngliche Liste wirklich abändern wollten:
List<T> noDupes = new ArrayList<T>(new HashSet<T>(list));
list.clear();
list.addAll(noDupes);
Um die Reihenfolge beizubehalten, ersetzen Sie einfach HashSet durch LinkedHashSet.
Verwenden Sie Linqs Gewerkschaft Methode.
Hinweis: Diese Lösung setzt keine Kenntnisse über Linq voraus, abgesehen davon, dass sie existiert.
Code
Fügen Sie zunächst am Anfang Ihrer Klassendatei Folgendes hinzu:
using System.Linq;
Jetzt können Sie folgendes verwenden, um Duplikate aus einem Objekt namens zu entfernen, obj1
:
obj1 = obj1.Union(obj1).ToList();
Hinweis: Umbenennen obj1
auf den Namen Ihres Objekts.
Wie es funktioniert
Der Befehl Union listet je einen Eintrag von zwei Quellobjekten auf. Da es sich bei obj1 um beide Quellobjekte handelt, wird obj1 auf einen der beiden Einträge reduziert.
El ToList()
gibt eine neue Liste zurück. Dies ist notwendig, weil Linq-Befehle wie Union
gibt das Ergebnis als IEnumerable-Ergebnis zurück, anstatt die ursprüngliche Liste zu ändern oder eine neue Liste zurückzugeben.
Hier ist eine Erweiterungsmethode zum Entfernen benachbarter Duplikate in-situ. Rufen Sie zuerst Sort() auf und übergeben Sie denselben IComparer. Dies sollte effizienter sein als die Version von Lasse V. Karlsen, die RemoveAt wiederholt aufruft (was zu mehreren Blockspeicherbewegungen führt).
public static void RemoveAdjacentDuplicates<T>(this List<T> List, IComparer<T> Comparer)
{
int NumUnique = 0;
for (int i = 0; i < List.Count; i++)
if ((i == 0) || (Comparer.Compare(List[NumUnique - 1], List[i]) != 0))
List[NumUnique++] = List[i];
List.RemoveRange(NumUnique, List.Count - NumUnique);
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
5 Stimmen
Ist Ihnen die Reihenfolge der Elemente im Ergebnis wichtig? Dies wird einige Lösungen ausschließen.
3 Stimmen
Eine Ein-Zeilen-Lösung:
ICollection<MyClass> withoutDuplicates = new HashSet<MyClass>(inputList);
0 Stimmen
Wo würde diese Methode angewendet werden?