Diese Funktion entfernt alle doppelten Einträge aus einem List(Of String) Array mit linearem Aufwand.
Das heißt das der Aufwand beim entfernen von doppelten Einträgen aus einem Array mit mehreren tausend Einträgen nur linear ansteigt statt Quadratisch. Wie hier bei diesem Snippet Snippet noch aus VB6 Zeiten:
http://dotnet-snippets.de/dns/doppelte-eintraege-aus-arraylist-loeschen-SID121.aspx
Vielen Dank an herbivore für den Hinweis. Ich wusste nicht das das mit Dictionaries so schnell geht.
PS: Was die Geschwindigkeit angeht (bei 10.000 Einträgen):
Mit quadratischem Aufwand: 2000ms
Mit linearem Aufwand: 7ms
Bei noch mehr Einträgen würde sich der Zeitfaktor noch um ein vielfaches erhöhen!
''' <summary>
''' Diese Funktion löscht mit linearem Aufwand doppelte Einträge aus einem List(Of T) Array
''' </summary>
''' <param name="List">Das Array dessen doppelte Einträge gelöscht werden sollen</param>
Public Function RemoveDoubleItems(ByVal List As List(Of String)) As List(Of String)
Dim KeyList As New Generic.Dictionary(Of String, String)
Dim NewList As New List(Of String)
For Each Item As String In List
If KeyList.ContainsKey(Item) = False Then
KeyList.Add(Item, String.Empty)
NewList.Add(Item)
End If
Next
Return NewList
End Function
2 Kommentare zum Snippet