Tengo una lista testList
que contiene un montón de cadenas. Me gustaría agregar una nueva cadena en el testList
solo si aún no existe en la lista. Por lo tanto, necesito hacer una búsqueda insensible a mayúsculas y minúsculas de la lista y hacerla eficiente. No puedo usar Contains
porque eso no tiene en cuenta la carcasa. Tampoco quiero usar ToUpper/ToLower
por razones de rendimiento. Me encontré con este método, que funciona:Búsqueda de lista insensible a mayúsculas/minúsculas
if(testList.FindAll(x => x.IndexOf(keyword,
StringComparison.OrdinalIgnoreCase) >= 0).Count > 0)
Console.WriteLine("Found in list");
Esto funciona, pero también coincide con palabras parciales. Si la lista contiene "cabra", no puedo agregar "avena" porque dice que "avena" ya está en la lista. ¿Hay alguna manera de buscar de manera eficiente las listas de una manera que no distinga entre mayúsculas y minúsculas, donde las palabras tienen que coincidir exactamente? gracias
Sólo para añadir, en algunas pruebas rápidas, parece que el primer método es de alrededor de 50% más rápido. Tal vez alguien más puede confirmar/negar eso. – Brap
A partir de .NET 2.0, esto ahora es fácil de hacer: consulte la respuesta de shaxby a continuación. – Joe
El método Contiene la referencia de shaxby (que tiene una sobrecarga que toma un IEqualityComparer) es parte de LINQ, por lo que ciertamente no ha estado disponible desde .NET 2.0. Solo la clase StringComparer ha existido por un tiempo. List no tiene ese método, ni tampoco ArrayList o StringCollection (cosas que podría haber estado haciendo referencia fácilmente como su 'lista'). –