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]

XML und .NET Überblick

Um auf dem neuesten Wissensstand zu sein, sollten Sie unser aktuelles ASP .NET Komplett Seminar belegen.
Nach dem Seminar kennen Sie die wichtigsten Strömungen in der Software-Technologie

ASP.NET Core - Der Einstieg

In nur 3 Tagen lernen Sie, wie man mit ASP.NET Core und den Technologien MVC, Entity Framework, WebAPI und Razor professionelle Web-Anwendungs-Architekturen aufbaut. Diese Schulung ist der perfekte Einstieg, um datengetriebene und präsentations-orientierte Applikationen auf Basis der ASP.NET Core Plattform zu erstellen.

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