[VB.NET] List(of T) vergleichen

ronaldo84

Erfahrenes Mitglied
Hallo Gemeinde,

ich habe folgendes Problem:
Ich habe eine Anzhl von List(of T). Diese Listen sind alle vom gleichen Typen. Es können aber unterschiedliche viele Listen sein. Mein Problem ist nun das ich nur die Einträge haben will, die in allen Listen vorhanden sind. An einem Beispiel:

List1 List2 List3
1 2 3
5 4 6
6 6 7

In diesem Fall sollte nur der Eintrag 6 ausgegeben werden.
Hoffe das ich es soweit verständlich ausgedrückt habe.
Komme im Moment nicht weiter.

Vielen Dank
 
Hey Ronaldo, die generische List<T> hat eine Funktion indexOf(T) - wenn du deine erste Liste durchrennst kannst du bei List2.indexOf(currentList1Object) > 0 und List3.indexOf(currentList1Object) > 0 abfragen und schon hast du's
 
oder prüf direkt mit der Contains Methode.

Achtung! Bei Klassen wird Referenz geprüft
(Bei IndexOf ebenfalls Refernzvergleich).

Hast du also blos Objekte mit gleichen Inhalten solltest du dir mal die Methode Exists(...) der Liste anschauen.

Zu Contains oder IndexOf
Oder du implementiert die Schnittstelle IEquatable dann kannst du den Referenzvergleich umgehen.
Sind es structs sollte es erstmal keine Probleme geben.
 
Du könntest auch versuchen, das mit LINQ zu lösen, allerdings gilt auch da wieder, dass du aufpassen musst, wenn du Klassen hast, wegen dem Referenzvergleich. So liefert zum Beispiel ein "distinct" die komplette Aufzählung zurück, auch wenn sie Objekte beinhaltet, bei denen alle Eigenschaften die exakt selben Werte haben.
 
mit LINQ kannst du einfach Intersect benutzen

also Liste1.Intersect(Liste2) und das dann in ner schleife (je nachdem wieviele Listen du hast)
 
Hallo und vielen Dank für eure Antworten.
Falls jemand soetwas mal braucht hier meine Lösung
Visual Basic:
    Dim HT As New Hashtable()
    Dim BogList As New List(Of Bogen)
    Dim NewBog As New Bogen()

    For Each Bog As Bogen In __app.BogenByAuftragList
      HT.Add(Bog, True)
    Next

    For Each Ver As Version In VersionListe
      BogenByVersionList = VBDAO.GetSelectedBogenByVersion(Ver, True)

      For Each Bog As Bogen In __app.BogenByAuftragList
        If (Not BogenByVersionList.Contains(Bog)) Then
          HT.Item(Bog) = False
        End If
      Next

    Next

    For Each Bog As Bogen In HT.Keys
      If (CBool(HT.Item(Bog)) = True) Then
        BogList.Add(Bog)
      End If
    Next
    liBogen = BogList
Vielen Dank nochmal.
 

Neue Beiträge

Zurück