Web- und Software Development

Liste von doppelten Einträgen befreien

Written By: - Aug• 03•10

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-Klasse als Dictionary-Auflistung ohne Werte betrachtet werden.”

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 : )


Ähnliche Beiträge

You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.

One Comment

  1. Udo Nesshoever sagt:

    Gern geschehen ;)