2 Listen verbinden aber dabei ohne doppelte Einträge

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    @VaporiZed

    VaporiZed schrieb:

    @Steppenpferd: Was ist bei Dir in Post#6 l1 und l2? Das steht da nicht explizit, obwohl es implizit mir klar ist. Nur: Hast Du Post#10 gelesen?


    Jup, Du hast natürlich Recht, habs versäumt die Deklaration der Klassen-Liste die bei mir über dem FormLoad stand mit zu kopieren.
    #10 hab ich gelesen und sehe meine Frage aus #4 damit als beantwortet.
    Das Chaos beginnt mit komprimierter Ordnung (Steppenpferd 2019)
    @ErfinderDesRadesnull
    Ich hab deinen Code nicht getestet. Sieht mir aber irgendwie gefährlich aus.
    Mag sein das es unter bestimmten Bedingungen funktioniert. Wahrscheinlich dann, wenn die "Koordinaten" jeweils nur einmal in list1 und list2 vorkommen.

    Was man sofort erkennt, list1 wird nicht von Duplikaten bereinigt (bei AddRange). Ist vielleicht auch bewusst so gemacht worden.
    Ansonsten gefällt mir das Vorgehen mit den HashSet. Werde ich mir sicher noch anschauen.

    HashSet's haben doch auch die Möglichkeit IEqualityComparer einzubinden. Da könnte man eine meiner 3 Compare-Klassen einbauen. Würde sicher funktionieren.

    Edit:
    Das HashSet hat seine Vorzüge
    Value-Prüfung funktioniert.
    Reference-Prüfung funktioniert (Initialisierung mit LINQ, Prüfung ohne LINQ, nur mit UNION)
    Reference-Value-Prüfung funktioniert (Ein kleinwenig Mehraufwand, Trennung von R + V)
    Geschwindigkeit/Performance . No Bad
    Für selber gemachte Klassen mit Primitiven Datentypen, oder gängigste Boardmittel-Structure geeignet.


    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()

    hmm - wüsste nicht, was daran gefährlich sein sollte.
    Dass List1 auch Dubletten-bereinigt werden solle, war nicht gefordert, könnte man aber mit wenig Aufwand so ähnlich abhandeln.

    VB.NET-Quellcode

    1. Dim hsh = New HashSet(Of Point)
    2. dim dubletteFree = list1.Where(function(spt)hsh.Add(spt.p)).ToList
    3. dubletteFree.AddRange(list2.Where(function(spt)hsh.Add(spt.p)))