2012-05-07 25 views
17

Ho una lista come questa e voglio essere in grado di cercare all'interno di questo elenco una sottostringa proveniente da un'altra stringa. Esempio:Trova sottostringa in un elenco di stringhe

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

voglio cercare "There" nel mio elenco e tornare "4234 - There". Ho provato:

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

risposta

23

Con LINQ, proprio recuperando il primo risultato:

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

Per fare questo w/o Linq (ad esempio, per la versione precedente di .NET, come NET 2.0) è possibile utilizzare il metodo List<T> s' FindAll, che in questo caso sarebbe restituire tutti gli elementi della lista che contengono il termine di ricerca:

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

Ciao, grazie per la risposta rapida, sto ricevendo un errore di compilazione: FirstOrDefault e non il metodo di estensione. Devo aggiungere qualcosa di list library? – user1380621

+0

Come aggiungere Linq? Ci scusiamo per la nuova domanda. – user1380621

+2

devi aggiungere un 'usando System.Linq' al tuo file - presumo tu stia usando .NET 4.0? – BrokenGlass

9

Per restituire tutte le voci th:

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

solo la prima:

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

quello che hai scritto provoca l'errore di compilazione

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

Substring viene utilizzato per ottenere una parte di stringa utilizzando posizione del carattere e/o la lunghezza del la stringa risultante.

ad esempio srch.Substring(1, 3) restituisce la stringa "suo"

Come altri hanno già detto si dovrebbe usare Contains che ti dice se una stringa si verifica all'interno di un'altra. Se si voleva conoscere la posizione reale usereste IndexOf

0

Mi piace usare indexOf o contiene

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

stesso problema che ho avuto a che fare.

Hai bisogno di questo:

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

Dove:

myList è List<String> ha i valori che myString deve contenere in qualsiasi posizione

Quindi, di fatto, si cerca se myString contiene alcun delle voci dalla lista. Spero che questo sia quello che volevi ...

Problemi correlati