Feedback

VB - Doppelte Einträge aus Arraylist löschen

Veröffentlicht von am 7/3/2006
(1 Bewertungen)
Diese Funktion löscht alle Doppelten Einträge aus einer Arraylist (nicht zu verwechseln mit einem Array). Also aus AAABBBCCC wird ABC
Public Function KillDoubleEntries(ByRef RefArray As ArrayList) As Long
    Dim Count As Long
    For i As Long = 0 To RefArray.Count - 1
        For n As Long = i + 1 To RefArray.Count - 1
            If i <> n And (RefArray.Count - 1) >= n Then
                If RefArray(i).ToString = RefArray(n).ToString Then
                    RefArray.RemoveAt(i)
                    Count += 1
                    n -= 1
                End If
            End If
        Next
    Next
    Return Count
End Function
Abgelegt unter Doppelt, Array, Löschen.

2 Kommentare zum Snippet

herbivore schrieb am 1/17/2007:
Die Funktion ist ungünstig implementiert und verursacht unnötiger Weise quadratischen, wenn nicht sogar kubischen Aufwand, obwohl man mit linearem Aufwand auskäme. Besser wäre die Elemente der Liste genau einmal durch zugehen und sich in den Keys eines Dictionary die Objekte zu merken, die bereits enthalten sind. Wenn ein Objekt noch nicht enthalten ist (was man mit !ContainsKey feststellen kann), fügt man es am Ende einer neuen Liste hinzu. Nur so erhält man linearen Aufwand. Geschachtelte Schleifen und RemoveAt verursachen dagegen quadratischen oder schlimmeren Aufwand.
ArrayList sollte durch List oder noch besser durch IList o.ä. ersetzt werden.
herbivore schrieb am 2/6/2007:
Auf meinen Kommentar hin, hat Khartak mittlerweile dankenswerterweise ein neues Snippet "Doppelte Arrayeinträge mit linearem Aufwand entfernen" veröffentlicht:
http://dotnet-snippets.de/dns/Snippet_detail.aspx?=435
 

Logge dich ein, um hier zu kommentieren!