Feedback

VB - Doppelte Arrayeinträge mit linearem Aufwand entfernen

Veröffentlicht von am 20.01.2007
(3 Bewertungen)
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!
GFU-Schulungen  [Anzeige]

Visual Studio Team Foundation Server 2017/2015 (TFS) für Entwickler - Kompakt

Nach Teilnahme an dieser Schulung kennen Sie alle wesentlichen Funktionen des TFS für Entwickler. Sie setzen Software-Entwicklung mit dem Visual Studio Team Foundation Server erfolgreich um.

C# 2017/2015/2013 Grundlagen

Nach Abschluss des Kurses sind Ihnen die Datentypen und Klassenbibliotheken von C# bekannt. Außerdem sind Sie in der Lage, mit Variablen umzugehen und deren Typen zu konvertieren. Sie definieren Namespaces und setzen diese ein, Sie erstellen eigene Klassen  und bauen Trouble Shooting ein.

''' <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
Abgelegt unter Array, List.

2 Kommentare zum Snippet

Hans-Joachim me0ner schrieb am 17.01.2010:
Kann jetzt mit VS 2008 auch so implementiert werden:

Public Function RemoveDoubleItems(Of T)(ByVal IList(Of T)) As List(Of T)
Dim hs As New HashSet(Of T)

Hans-Joachim me0ner schrieb am 17.01.2010:
Kann jetzt mit VS 2008 auch so implementiert werden:

Public Function RemoveDoubleItems(Of T)(ByVal MyList As IList(Of T)) As List(Of T)
Dim hs As New HashSet(Of T)
hs.UnionWith(MyList.AsEnumerable)
Return hs.ToList
End Function

Ob dieser Code gleich schnell oder schneller ist, müsste erst noch überprüft werden.
 

Logge dich ein, um hier zu kommentieren!