Unikate aus einer Liste erhalten

Was ist der schnellste / effizienteste Weg, um die verschiedenen Elemente aus einer Liste zu erhalten?

Ich habe eine List , die möglicherweise mehrere sich wiederholende Elemente enthält und nur die eindeutigen Werte in der Liste haben möchte.

Verwende ein HashSet . Beispielsweise:

 var items = "ABADAC".Split(' '); var unique_items = new HashSet(items); foreach (string s in unique_items) Console.WriteLine(s); 

Drucke

 EIN
 B
 D
 C

Sie können die Distinct Methode verwenden, um ein IEnumerable von verschiedenen Elementen zurückzugeben:

 var uniqueItems = yourList.Distinct(); 

Wenn Sie die Reihenfolge eindeutiger Elemente benötigen, die als List , können Sie ToList einen Aufruf ToList :

 var uniqueItemsList = yourList.Distinct().ToList(); 

Sie können die Distinct- Erweiterungsmethode von LINQ verwenden

In .Net 2.0 bin ich mir ziemlich sicher über diese Lösung:

 public IEnumerable Distinct(IEnumerable source) { List uniques = new List(); foreach (T item in source) { if (!uniques.Contains(item)) uniques.Add(item); } return uniques; } 

Abgesehen von der Distinct Erweiterungsmethode von LINQ können Sie ein HashSet -Objekt verwenden, das Sie mit Ihrer Sammlung initialisieren. Dies ist höchstwahrscheinlich effizienter als der LINQ-Weg, da es Hash-Codes ( GetHashCode ) anstelle eines IEqualityComparer .

In der Tat, wenn es für Ihre Situation HashSet , würde ich nur ein HashSet zum Speichern der Elemente an erster Stelle verwenden.