So kann es gehen, ich hab mir eine Methode geschrieben, die doppelte Items aus einer Liste entfernen soll. Funktioniert soweit auch gut.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public List<T> RemoveDoubleListItems<T>(List<T> list) { var newList = new List<T>(); var keys = new Dictionary<T, object>(); foreach (T listItem in list) { if (!keys.ContainsKey(listItem)) { newList.Add(listItem); keys.Add(listItem, null); } } return newList; } |
In der Datenbank wo ich meine Snippets speichere (codekeep), habe ich kurze Zeit später einen Blick drauf geworfen und dachte, ich trau meinen Augen nicht. Die selbe Funktion noch einmal, von jemand anderes geschrieben. Ich klick mich da rein und musste dann feststellen, das ich mit meinem Ansatz ganz schön “blöd” da gestanden haben muss, denn hier präsentierte sich ein “Einzeiler” der nicht besser sein kann, wie ich finde.
Der Udo Nesshoever verwendet dafür das Hashset und lässt dieses die Arbeit machen.
1 2 3 4 | public static List<T> RemoveDuplicates<T>(List<T> list) { return list != null ? new HashSet<T>(list).ToList() : null; } |
Ich kenne zwar das Hashset, habe aber noch nichts damit gemacht. Von daher wusste ich natürlich auch nicht, wenn man dem eine IEnumerable gibt, entfernt diese automatisch alle doppelten Items aus der Collection. Steht so auch leider nicht in der MSDN. Dort steht lediglich: “Eine Menge ist eine Auflistung ohne doppelte Elemente”. Naja aus Erfahrung lernt man. Stimmt.
Interessant finde ich auch “Einfach ausgedrückt, kann die HashSet
Schade das man auf codekeep kein Rating bzw. keine Kommentar abgeben kann, so könnte man durchaus auf solche Ansätze aufmerksam gemacht werden.
Vielen Dank für den Tipp Udo : )







Gern geschehen ;)