none
Wert in List(of) suchen in einer Structure-Variablen RRS feed

  • Frage

  • Hallo Leute,

    ich habe eine Structure-Variable, die ich für eine List(of) verwende. Nun möchte ich in der List(of) ja auch suchen.

    Beispiel:

        Public Structure Elster_Appointment
            Public MdNr As Integer
            Public Year As Integer
            Public Subject As String
        End Structure
    
    Dim dicAppointmenlist As List(Of Elster_Appointment)

    Wie kann ich jetzt feststellen, ob es z. B. für die dicAppointment.MdNr einen Wert gibt?

    Ich kann zwar alle dicAppointment mit for i=0 to dicAppointment.Count-1 durchlaufen und die Prüfung machen. Aber kann man hier nicht auch mit Contains oder Find usw. arbeiten?

    Das müsste doch gerade bei vielen Einträgen erheblich schneller sein oder?

    Vielleicht kann mir ja einer einen Tip geben?

    Vielen Dank im Voraus.

    Gruß Ahmed

    Sonntag, 4. November 2018 14:02

Antworten

  • Hi,

    du kannst so etwas machen:

    Dim res = dicAppointmenlist.Where(Function(g) g.MdNr > 0).ToList()

    Oder mit Linq:

    Dim re2 = From c In dicAppointmenlist Where (c.Subject Like "[a-f0-9]")

    Es gibt viele Möglichkeiten...

    Zu Find und Contains und so weiter gibt es doch eine gute Doku.

    Gruß


    Freiberufler im Bereich Softwareentwicklung Von der PLC und Robotik zu VB.NET & C#, vorrangig WPF und UWP


    Sonntag, 4. November 2018 16:08
  • Hi,

    also wenn ich folgendes teste:

        Public Structure Elster_Appointment
            Public MdNr As Integer
            Public Year As Integer
            Public Subject As String
        End Structure
    
        Dim dicAppointmenlist As List(Of Elster_Appointment)
    
        Sub Test0815()
    
            dicAppointmenlist = New List(Of Elster_Appointment)
    
            dicAppointmenlist.Add(New Elster_Appointment() With {.MdNr = 1, .Year = 12, .Subject = "q"})
            dicAppointmenlist.Add(New Elster_Appointment() With {.MdNr = 2, .Year = 13, .Subject = "w"})
            dicAppointmenlist.Add(New Elster_Appointment() With {.MdNr = 3, .Year = 14, .Subject = "e"})
            dicAppointmenlist.Add(New Elster_Appointment() With {.MdNr = 4, .Year = 15, .Subject = "r"})
    
            Dim r = dicAppointmenlist.FindIndex(Function(c) c.MdNr = 3)
    
        End Sub

    ...ist die Variable r=2, was ja richtig ist.

    Gruß


    Freiberufler im Bereich Softwareentwicklung Von der PLC und Robotik zu VB.NET & C#, vorrangig WPF und UWP

    Sonntag, 4. November 2018 19:15

Alle Antworten

  • Hi,

    du kannst so etwas machen:

    Dim res = dicAppointmenlist.Where(Function(g) g.MdNr > 0).ToList()

    Oder mit Linq:

    Dim re2 = From c In dicAppointmenlist Where (c.Subject Like "[a-f0-9]")

    Es gibt viele Möglichkeiten...

    Zu Find und Contains und so weiter gibt es doch eine gute Doku.

    Gruß


    Freiberufler im Bereich Softwareentwicklung Von der PLC und Robotik zu VB.NET & C#, vorrangig WPF und UWP


    Sonntag, 4. November 2018 16:08
  • Vielen Dank für die Info.

    Ich bin zwischenzeitlich auch folgende Lösung gestoßen:

    Dim r = dicAppointmenlist.FindIndex(Function(c) c.MdNr = lMdNr)
    
    If (r = -1) Then Exit Sub  'no Match

    Die Funktion liefert allerdings immer nur ein r=0 (Wert gefunden) oder r=-1 (Wert nicht gefunden). Damit habe ich zwar meine Prüfung, aber wie muss ich vorgehen, wenn ich den genauen Index der List(of) haben möchte?

    Ich hätte gedacht, dass FindIndex immer den Index von dicAppointment zurückgibt.

    Gruß A. Martens

    Sonntag, 4. November 2018 16:59
  • Also begreifen tue ich es zwar nicht ganz, aber wenn man

    Debug.Print(dicAppointmenlist.Item(r).MdNr)

    anwendet, wird die richtige MdNr ausgeworfen.

    Ich werde mich wohl damit noch intensiver beschäftigen müssen.
    Auf jeden Fall sind meine Fragen erst einmal alle geklärt.

    Ahmed

    Sonntag, 4. November 2018 18:14
  • Hi,

    also wenn ich folgendes teste:

        Public Structure Elster_Appointment
            Public MdNr As Integer
            Public Year As Integer
            Public Subject As String
        End Structure
    
        Dim dicAppointmenlist As List(Of Elster_Appointment)
    
        Sub Test0815()
    
            dicAppointmenlist = New List(Of Elster_Appointment)
    
            dicAppointmenlist.Add(New Elster_Appointment() With {.MdNr = 1, .Year = 12, .Subject = "q"})
            dicAppointmenlist.Add(New Elster_Appointment() With {.MdNr = 2, .Year = 13, .Subject = "w"})
            dicAppointmenlist.Add(New Elster_Appointment() With {.MdNr = 3, .Year = 14, .Subject = "e"})
            dicAppointmenlist.Add(New Elster_Appointment() With {.MdNr = 4, .Year = 15, .Subject = "r"})
    
            Dim r = dicAppointmenlist.FindIndex(Function(c) c.MdNr = 3)
    
        End Sub

    ...ist die Variable r=2, was ja richtig ist.

    Gruß


    Freiberufler im Bereich Softwareentwicklung Von der PLC und Robotik zu VB.NET & C#, vorrangig WPF und UWP

    Sonntag, 4. November 2018 19:15
  • Stimmt, funktioniert einwandfrei. Warum ex bei mir vorher immer nur 0 geliefert hatte, kann ich nicht sagen. Wahrscheinlich war ich nur einfach zu blöde! :-) Es wird jedenfalls das richtige Ergebnis (Index) geliefert.

    Ich muss mich einfach mehr mit List(of) beschäftigen. Diese Möglichkeit ist echt flexibel und unheimlich mächtig.

    Gruß Ahmed

    Montag, 5. November 2018 16:46