List (of string) mit Werte aus zweiter List (of string) bereinigen

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von picoflop.

    List (of string) mit Werte aus zweiter List (of string) bereinigen

    Hallo zusammen,

    ich habe zwei List (of String), an die erste List gebe ich SubKeys aus der Registry, in der zweiten List sind Strings enthalten die aus der ersten List entfernt werden sollen. Da ich zudem nicht weiss wie die Schreibweise der SubKeys vorliegt, möchte ich die Gross-/Klein-Schreibung ignorieren.

    Leider stellt List (of String) keine Funktion bereit um das zu erledigen.

    Muss ich das ganze mit einer For Each Schleife in einer For Each Schleife erledigen oder gibt es einen eleganteren Weg das zu tun?

    Viele Grüsse,
    Daniel



    Kurz zum veranschaulichen, hier ist in RegSubKeyNotUse eine Liste (wird später automatisch befüllt) die Einträge enthält, welche aus der Liste RegSubKeys wieder entfernt werden sollen.

    VB.NET-Quellcode

    1. 'Diese Keys nicht berücksichtigen
    2. Dim RegSubKeyNotUse As New List(Of String)
    3. RegSubKeyNotUse.AddRange(New String() {"%__pseudo__", "TemporaryDistServer"})
    4. 'SubKeys zuweisen
    5. Dim RegSubKeys As New List(Of String)
    6. RegSubKeys.AddRange(RegKey.GetSubKeyNames)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DniBo“ ()

    Meinst Du so was?
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim l1 As New List(Of String)
    3. Dim l2 As New List(Of String)
    4. l1.Add("1")
    5. l1.Add("2")
    6. l1.Add("3")
    7. l1.Add("4")
    8. l1.Add("5")
    9. l2.Add("1")
    10. l2.Add("2")
    11. l2.Add("3")
    12. For Each item As String In l2
    13. l1.Remove(item)
    14. Next
    15. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vielleicht machst Du Dir eine "Schatten-Liste", die alle Einträge der "Mutter-Liste" ToLower kopiert. Mit Item.ToLower stellst Du den Index fest und löschat über Index:

    VB.NET-Quellcode

    1. l1.RemoveAt(index)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ist die Liste, der zu entfernenden Einträge, fix vordefiniert oder dynamisch?

    Wenn diese fix ist, dann kannst du direkt beim auslesen filtern.

    VB.NET-Quellcode

    1. 'Diese Keys nicht berücksichtigen
    2. Dim RegSubKeyNotUse As New List(Of String)
    3. RegSubKeyNotUse.AddRange(New String() {"%__pseudo__", "TemporaryDistServer"})
    4. 'SubKeys zuweisen
    5. Dim RegSubKeys As New List(Of String)
    6. for each RegKey as String in RegKey.GetSubKeyNames
    7. if not RegSubKeyNotUse.contains(key) then
    8. RegSubKeys.add(key)
    9. end if
    10. next
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D

    VB.NET-Quellcode

    1. Dim l1 As New List(Of String) From {"Foo", "Bar", "John"}
    2. Dim l2 As New List(Of String) From {"john"}
    3. Dim r = l1.Except(l2, StringComparer.CurrentCultureIgnoreCase)
    4. System.Array.ForEach(r.ToArray, AddressOf Debug.Print)


    EDIT:
    Noch trivialer:

    VB.NET-Quellcode

    1. l1.RemoveAll(Function(s) l2.Contains(s, StringComparer.CurrentCultureIgnoreCase))

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „picoflop“ ()