Suchen und Finden in String-Liste mit mehreren Suchbegriffen

  • VB.NET

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

    Suchen und Finden in String-Liste mit mehreren Suchbegriffen

    Guten Morgen,

    ich komme mit dem Suchen in einer Liste nicht zurecht, wenn die Suchbegriffe aus einer anderen Liste stammen sollen.

    Dieses kleine Beispiel verwendet nur eine Liste "Items".
    Dort stehen Namen, die durchsucht werden sollen.

    VB.NET-Quellcode

    1. Sub Main()
    2. Dim Items As New List(Of String) From {"Tim", "Tom", "Ralf", "Ina", "Susann", "Lara"}
    3. Dim SearchPattern As New List(Of String) From {"Ralf", "T"}
    4. For Each person As String In Items.FindAll(Function(e) e.Contains("Ralf") Or e.Contains("T"))
    5. Console.WriteLine(person)
    6. Next
    7. Console.ReadKey()
    8. End Sub

    C-Quellcode

    1. static void Main()
    2. {
    3. List<string> Items = new List<string> {"Tim", "Tom", "Ralf", "Ina", "Susann", "Lara"};
    4. List<string> SearchPattern = new List<string> {"Ralf","T"};
    5. foreach (string person in Items.FindAll(e => e.Contains("Ralf") | e.Contains("T")))
    6. {
    7. Console.WriteLine(person);
    8. }
    9. Console.ReadKey();
    10. }

    In der Schleife wird nach "Ralf" und "T" gesucht.
    Die Treffer werden richtig angezeigt:
    Tim
    Tom
    Ralf

    Da es unterschiedliche Suchbegriffe geben kann (sowohl inhaltlich, als auch von der Anzahl), möchte ich die Suchbegriffe aus der zweiten Liste "SearchPattern" benutzen und das möglichst auch noch case insensitive.
    Ich weiß nur momentan nicht, wie ich die Liste einbauen kann.

    Hilfe ;)

    LG,
    Bruno

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

    VB.NET-Quellcode

    1. Sub Main()
    2. Dim Items As New List(Of String) From {"Tim", "Tom", "Ralf", "Ina", "Susann", "Lara"}
    3. Dim SearchPattern As New List(Of String) From {"Ralf", "T"}
    4. For Each person In Items.FindAll(Function(itm) SearchPattern.Any(Function(pat) itm.IndexOf(pat, StringComparison.OrdinalIgnoreCase) >= 0))
    5. Console.WriteLine(person)
    6. Next
    7. End Sub
    Oder so was:

    VB.NET-Quellcode

    1. Dim l1 As New List(Of String) From {"A", "B", "D"}
    2. Dim l2 As New List(Of String) From {"A", "B", "C"}
    3. ' Alles in l1, was NICHT in l2 ist -> D
    4. Dim r_a = l1.Except(l2)
    5. ' Alles in l2, was NICHT in l1 ist -> C
    6. Dim r_b = l2.Except(l1)
    7. ' Alles was in BEIDEN Listen ist -> A,B
    8. Dim r_c = l1.Intersect(l2)
    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!