2012-05-07 28 views
17

Tengo una lista como tal y quiero poder buscar dentro de esta lista una subcadena procedente de otra cadena. Ejemplo:Buscar subcadena en una lista de cadenas

List<string> list = new List<string>(); 
string srch = "There"; 
list.Add("1234 - Hello"); 
list.Add("4234 - There"); 
list.Add("2342 - World"); 

Quiero buscar "There" dentro de mi lista y volver "4234 - There". He intentado:

var mySearch = list.FindAll(S => s.substring(srch)); 
foreach(var temp in mySearch) 
{ 
    string result = temp; 
} 

Respuesta

23

Con LINQ, simplemente recuperar el primer resultado:

string result = list.FirstOrDefault(s => s.Contains(srch)); 

Para hacer esto w/o LINQ (por ejemplo, la versión anterior de .NET tales como .NET 2.0) que pueda utilizar List<T> 's método FindAll, que en este caso sería devolver todos los elementos de la lista que contienen el término de búsqueda:

var resultList = list.FindAll(delegate(string s) { return s.Contains(srch); }); 
+0

Hola, gracias por la respuesta rápida, me aparece un error de compilación: FirstOrDefault y no el método de extensión. ¿Debo agregar algún tipo de biblioteca de listas? – user1380621

+0

¿Cómo agregar Linq? Lo siento por la nueva pregunta. – user1380621

+2

necesita agregar 'using System.Linq' a su archivo - ¿Supongo que está usando .NET 4.0? – BrokenGlass

9

Para devolver todas las entradas º:

IEnumerable<string> result = list.Where(s => s.Contains(search)); 

Sólo el primero de ellos:

string result = list.FirstOrDefault(s => s.Contains(search)); 
1

lo que has escrito hace que el error de compilación

The best overloaded method match for 'string.Substring(int)' has some invalid arguments

subcadena se utiliza para obtener parte de la cadena utilizando la posición del carácter y/o duración de la la cadena resultante.

por ejemplo srch.Substring(1, 3) devuelve la cadena "su"

Como otros han mencionado que debe utilizar Contains que te dice si una cadena se produce dentro de otro. Si lo que quería saber la posición real que tendría que utilizar IndexOf

0

me gusta usar indexOf o contiene

someString.IndexOf("this"); 
someString.Contains("this"); 
0

mismo problema que tenía que hacer.

Esto es necesario:

myList.Where(listStrinEntry => myString.IndexOf(listStringEntry) != -1) 

Dónde:

myList es List<String> tiene los valores que myString ha de contener en cualquier posición

Así que de hecho se busca si miCadena contiene ningún de las entradas de la lista. Espero que esto es lo que quería ...

Cuestiones relacionadas