Найти подстроку в списке строк
у меня есть такой список, и я хочу иметь возможность искать в этом списке подстроку из другой строки. Пример:
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 содержит любую из записей из списка. Надеюсь, ты этого хотела...