2012-05-07 66 views
17

Mam taką listę i chcę mieć możliwość wyszukiwania na tej liście podciągu pochodzącego z innego ciągu. Przykład:Znajdź podciąg w liście ciągów znaków

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

chcę szukać "There" w moim liście i powrócić "4234 - There". Próbowałem:

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

Odpowiedz

23

z LINQ, po prostu pobierając wynik pierwszy:

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

Aby to zrobić w/o Linq (np wcześniejszej wersji .NET, takich jak .NET 2.0) Można używać FindAll metodę List<T> „s, która w tym przypadku zwrócić wszystkie pozycje na liście, które zawierają szukanej

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

Witam, dziękuję za szybką odpowiedź, otrzymuję błąd kompilacji: FirstOrDefault, a nie metodę rozszerzenia. Czy muszę dodać coś z biblioteki list? – user1380621

+0

Jak dodać Linq? Przepraszamy za nowe pytanie. – user1380621

+2

musisz dodać do pliku plik 'using System.Linq' - Zakładam, że korzystasz z .NET 4.0? – BrokenGlass

9

zwrócić wszystkie th wpisów:

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

Tylko pierwszy z nich:

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

co napisałeś powoduje błąd kompilacji

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

podciągu jest używany do dostać część łańcucha używając pozycję znaku i/lub długości wynikowy ciąg.

np srch.Substring(1, 3) zwraca łańcuch „jej”

Jako inny wspomniałem należy użyć Contains który informuje, czy jeden ciąg nastąpi w ciągu drugiego. Jeśli chciał poznać aktualną pozycję byłoby użyć IndexOf

0

Lubię używać indexOf lub zawiera

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

sam problem miałem zrobić.

Trzeba to:

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

Gdzie:

myList jest List<String> ma wartości że myString musi zawierać w dowolnej pozycji

Więc de facto szukać jeśli myString zawiera dowolny wpisów z listy. Mam nadzieję, że to jest to, czego chciałeś ...

Powiązane problemy