Ich habe eine Liste testList
, die eine Reihe von Zeichenfolgen enthält. Ich möchte testList
nur dann eine neue Zeichenfolge hinzufügen, wenn diese noch nicht in der Liste vorhanden ist. Daher muss ich die Liste ohne Berücksichtigung der Groß- und Kleinschreibung durchsuchen und sie effizient gestalten. Ich kann nicht verwenden, Contains
da dies das Gehäuse nicht berücksichtigt. Ich möchte auch ToUpper/ToLower
aus Leistungsgründen nicht verwenden. Ich bin auf diese Methode gestoßen, die funktioniert:
if(testList.FindAll(x => x.IndexOf(keyword,
StringComparison.OrdinalIgnoreCase) >= 0).Count > 0)
Console.WriteLine("Found in list");
Dies funktioniert, stimmt aber auch mit Teilwörtern überein. Wenn die Liste "Ziege" enthält, kann ich "Hafer" nicht hinzufügen, da behauptet wird, dass "Hafer" bereits in der Liste enthalten ist. Gibt es eine Möglichkeit, Listen effizient ohne Berücksichtigung der Groß- und Kleinschreibung zu durchsuchen, bei denen Wörter genau übereinstimmen müssen? Vielen Dank
quelle
List<>.Exists(Predicate<>)
Instanzmethode verwenden. Beachten Sie auch, dassnull
dies explodieren kann , wenn die Liste Einträge enthält . In diesem Fall ist es sicherer zu sagenkeyword.Equals(x, StringComparison.OrdinalIgnoreCase)
alsx.Equals(keyword, StringComparison.OrdinalIgnoreCase)
(wenn Sie garantieren können, dass daskeyword
niemals null ist).Mir ist klar, dass dies ein alter Beitrag ist, aber nur für den Fall, dass jemand anderes sucht, können Sie ihn verwenden,
Contains
indem Sie den Vergleich zwischen Zeichenfolgengleichheit ohne Berücksichtigung der Groß- und Kleinschreibung wie folgt bereitstellen:Dies ist seit .net 2.0 laut msdn verfügbar .
quelle
StringComparer
Klasse gibt es seit 2.0, aber diese Überladung von Contains wurde in 3.5 eingeführt. msdn.microsoft.com/en-us/library/bb339118(v=vs.110).aspxBasierend auf der obigen Antwort von Adam Sills - hier ist eine schöne saubere Erweiterungsmethode für Enthält ... :)
quelle
Sie können StringComparer verwenden:
quelle
Basierend auf der Antwort von Lance Larsen - hier ist eine Erweiterungsmethode mit der empfohlenen Zeichenfolge. Vergleichen anstelle von Zeichenfolge. Gleichungen
quelle
Sie überprüfen, ob das Ergebnis von IndexOf größer oder gleich 0 ist. Dies bedeutet, ob die Übereinstimmung an einer beliebigen Stelle in der Zeichenfolge beginnt . Versuchen Sie zu überprüfen, ob es gleich 0 ist:
Jetzt passen "Ziege" und "Hafer" nicht zusammen, aber "Ziege" und "Ziege". Um dies zu vermeiden, können Sie die Längen der beiden Zeichenfolgen vergleichen.
Um all diese Komplikationen zu vermeiden, können Sie anstelle einer Liste ein Wörterbuch verwenden. Der Schlüssel wäre die Kleinbuchstabenzeichenfolge, und der Wert wäre die echte Zeichenfolge. Auf diese Weise wird die Leistung nicht beeinträchtigt, da Sie nicht
ToLower
für jeden Vergleich verwenden müssen, aber dennoch verwenden könnenContains
.quelle
Unten finden Sie ein Beispiel für die Suche nach einem Schlüsselwort in der gesamten Liste und das Entfernen dieses Elements:
Wenn Sie ein Buch entfernen möchten, das ein Schlüsselwort in der Text-Eigenschaft enthält, können Sie eine Liste von Schlüsselwörtern erstellen und aus der Liste der Bücher entfernen:
quelle
Ich hatte ein ähnliches Problem, ich brauchte den Index des Artikels, aber es musste die Groß- und Kleinschreibung nicht berücksichtigt werden. Ich habe mich ein paar Minuten im Internet umgesehen und nichts gefunden. Deshalb habe ich nur eine kleine Methode geschrieben, um dies zu erreichen tat:
Fügen Sie diesen Code derselben Datei hinzu und nennen Sie ihn folgendermaßen:
Hoffe das hilft, viel Glück!
quelle