Rubrik: Variablen/Strings · Array/ArrayList | VB-Versionen: VB.NET | 11.12.07 |
Doppelte Einträge aus einer Liste entfernen (.NET) Wie man schnell alle doppelten Einträge aus einer Liste entfernt, das erfahren Sie hier. | ||
Autor: Dieter Otter | Bewertung: | Views: 28.124 |
www.tools4vb.de | System: WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Heute möchten wir Ihnen zeigen, wie man mit gleichbleibenden Aufwand schnell alle doppelten Einträge aus einer Liste entfernt. Der Datentyp selbst spielt hierbei keine Rolle, da dieser durch die neue Generic-Funktion von VB 2005 zur Laufzeit festgelegt wird.
Erstellen wir uns zunächst einmal eine Liste vom Typ String mit mehrfach vorkommenden Einträgen:
Dim MyList As New List(Of String) ' Liste mit 1000 Einträgen füllen For i As Integer = 1 To 1000 Dim n As Integer = Int(10 * Rnd() + 1) MyList.Add("Eintrag " & n.ToString) Next
Als nächsten machen wir uns daran, eine universelle Funktion zu erstellen, die alle Duplikate einer übergebenen Liste mit beliebigem Datentyp ausfiltern:
' alle doppelten Einträge aus einer Liste entfernen Public Function DeleteDoublicates(Of Type)( _ ByVal oList As List(Of Type)) As List(Of Type) ' Neues List-Objekt, welches neu aufgebaut wird ' (ohne Duplikate!) Dim oResult As New List(Of Type) ' Dictionary erstellen Dim oDict As New Generic.Dictionary(Of Type, Type) ' Liste durchlaufen With oDict For Each oItem As Type In oList ' Falls Eintrag noch nicht im Dictionary existiert... If .ContainsKey(oItem) = False Then ' jetzt hinzufügen .Add(oItem, Nothing) ' und ebenfalls der Ergebnis-Liste hinzufügen oResult.Add(oItem) End If Next End With ' Dictionary zerstören oDict = Nothing ' Rückgabewert: Ergebnisliste = Liste ohne Duplikate Return oResult End Function
Um nun alle doppelten Einträge aus unserer String-Liste zu löschen, rufen wir die Funktion wie folgt auf:
' alle doppelten Einträge entfernen MyList = DeleteDoublicates(Of String)(MyList)
Um das Ganze auch testen zu können, schreiben wir den Inhalt in eine ListBox:
ListBox1.Items.Clear ListBox1.Items.AddRange(MyList.ToArray)
Das Löschen von Duplikaten funktioniert natürlich auch mit Integer-Listen:
Dim MyNumList As New List(Of Integer) For i As Integer = 1 To 1000 Dim n As Integer = Int(10 * Rnd() + 1) MyNumList.Add(n) Next
' alle doppelten Einträge entfernen MyNumList = DeleteDoublicates(Of Integer)(MyNumList)