Mam listę testList
zawierającą kilka ciągów. Chciałbym dodać nowy ciąg do testList
tylko wtedy, gdy jeszcze nie istnieje na liście. Dlatego muszę wykonać wyszukiwanie listy bez uwzględniania wielkości liter i sprawić, by był wydajny. Nie mogę użyć Contains
, ponieważ nie uwzględnia to obudowy. Również nie chcę używać ToUpper/ToLower
ze względu na wydajność. Natknąłem się na tę metodę, która działa:Wyszukiwanie listy bez rozróżniania wielkości liter
if(testList.FindAll(x => x.IndexOf(keyword,
StringComparison.OrdinalIgnoreCase) >= 0).Count > 0)
Console.WriteLine("Found in list");
Działa, ale dopasowuje również częściowe słowa. Jeśli lista zawiera "kozę", nie mogę dodać "owies", ponieważ twierdzi, że "owies" jest już na liście. Czy istnieje sposób, aby skutecznie wyszukiwać listy w sposób niewrażliwy na wielkość liter, gdzie słowa muszą dokładnie odpowiadać? dzięki
Wystarczy dodać w kilku szybkich testów, wydaje się, że pierwsza metoda jest około 50% szybciej. Może ktoś inny może to potwierdzić/zaprzeczyć. – Brap
Od wersji .NET 2.0 jest to teraz łatwe - spójrz na odpowiedź shaxby poniżej. – Joe
Metoda odwołań metody shaxby (która ma przeciążenie, które wymaga programu IEqualityComparer) jest częścią LINQ, więc z pewnością nie była dostępna od .NET 2.0. Tylko klasa StringComparer istnieje już od jakiegoś czasu. Lista nie ma tej metody, ani ArrayList ani StringCollection (rzeczy, które mógł łatwo odwoływać się jako jego "lista"). –