Announcement

Collapse
No announcement yet.

LINQ gemeinsame Elemente zweiter Listen ermitteln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • LINQ gemeinsame Elemente zweiter Listen ermitteln

    Hallo liebe Community,

    ich habe ein kleines Problem mit LINQ.
    Ich versuche zwei Listen miteinander zu vergleichen und möchte wissen welche Elemente der Liste A in B vorkommen und welche Elemente der Liste A in B nicht vorkommen.

    Welche Elemente nicht vorkommen ist mit A.Except(B) schnell erledigt, bei der zweiten Fragestellung laufe ich aber gegen eine Wand.
    Ich hatte mir erhofft das ich mit A.Contains(B) die gewünschte Liste erhalte, ich erhalte dann aber nur folgende Fehlermeldung:

    Code:
    "Der Wert vom Typ "System.Collections.Generic.List(Of String)" kann nicht in "String" konvertiert werden."
    Anbei der Quellcode der Prozedur zur besseren Verständlichkeit:


    [highlight=vbnet]
    Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click
    Dim lInput1 As New List(Of String)
    Dim lInput2 As New List(Of String)

    lInput1.AddRange(txtInput1.Lines)
    lInput2.AddRange(txtInput2.Lines)

    ' Alles in l1, was in l2 ist
    Dim r_Ja = lInput1.Contains(lInput2) <- erzeugt den o.g. Fehler


    ' Alles in l1, was NICHT in l2 ist
    Dim r_Nein = lInput1.Except(lInput2)

    Dim strJa As String = ""
    For x As Integer = r_Ja.Count - 1I To 0I Step -1I
    strJa &= r_Ja(x)
    If x <> 0I Then strJa &= Environment.NewLine
    Next x

    Dim strNein As String = ""
    For x As Integer = r_Nein.Count - 1I To 0I Step -1I
    strNein &= r_Nein(x)
    If x <> 0I Then strNein &= Environment.NewLine
    Next x

    txtJa.Text = strJa
    txtNein.Text = strNein
    End Sub
    [/highlight]

    Meine Frage ist nun ob es eine LINQ Methode gibt die ich für meine Zwecke nutzen kann?

    Für jeden Tipp dankbar!
    Gruß
    Rohabu

    P.S. Eine kleine Zusatzfrage: Wenn ich die o.g. Funktion habe werde ich damit Listen vergleichen die bis zu 35.000 Einträge haben können, dies ist sicher sehr zeitaufwändig...kann mir jemand Hinweise geben welche Teile des Codes besonders zeitraubend sind?

  • #2
    Contains sucht ein Element in der Liste. Was du suchst ist die Schnittmenge von A und B also die Intersect Methode.
    Um rauszufinden was zeit kostet solltest du es messen. Einen Profiler dranklemmen oder einfach einen CodeBlock denn du messen willst wie lang er dauert mit einer StopWatch kapseln.

    Comment


    • #3
      Hallo Ralf,

      vielen Dank für die schnelle Antwort! Funktioniert perfekt

      Gruß
      rohabu

      Comment

      Working...
      X