Найти подстроку в списке строк

у меня есть такой список, и я хочу иметь возможность искать в этом списке подстроку из другой строки. Пример:

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

Я хочу найти "There" в моем списке и return "4234 - There". Я пробовал:

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

5 ответов


С Linq, просто получая первый результат:

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

для этого без Linq (например, для более ранней версии .NET, такой как .NET 2.0) вы можете использовать List<T> ' s FindAll метод, который в этом случае вернет все элементы в списке, содержащие поисковый запрос:

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

чтобы вернуть все записи:

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

первый:

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

то, что вы написали вызывает ошибки компиляции

лучший перегруженный метод соответствует ' string.Подстрока (int) ' имеет некоторые недопустимые аргументы

подстрока используется для получения части строки, используя позицию символа и/или длину результирующей строки.

например srch.Substring(1, 3) возвращает строку "her"

как уже упоминалось, вы должны использовать Contains, который говорит вам, если одна строка встречается в другой. Если хочешь ... чтобы знать реальное положение нужно использовать IndexOf


Мне нравится использовать indexOf или содержит

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

та же проблема, которую я должен был сделать.

вам нужно:

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

где:

myList is List<String> не имеет значения это myString должен содержать в любом положении

таким образом, де-факто вы ищете, если myString содержит любую из записей из списка. Надеюсь, ты этого хотела...