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]

VB.NET Einführung

Die Schulung zeigt Ihnen, wie Sie einfache, benutzerorientierte Programme, die auf Datenbanken zugreifen, in VB.NET eigenständig entwickeln. 

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

Nach Teilnahme an dieser Schulung sind Ihnen die Grundlagen von ALM geläufig. Sie planen und steuern Projekte effizient mit dem Visual Studio Team Foundation Server.

''' <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!