Найти подстроку в списке строк
У меня есть список, подобный этому, и я хочу, чтобы иметь возможность искать в этом списке подстроку, поступающую из другой строки. Пример:
List<string> list = new List<string>();
string srch = "There";
list.Add("1234 - Hello");
list.Add("4234 - There");
list.Add("2342 - World");
Я хочу найти "There"
в моем списке и вернуть "4234 - There"
. Я пробовал:
var mySearch = list.FindAll(S => s.substring(srch));
foreach(var temp in mySearch)
{
string result = temp;
}
Ответы
Ответ 1
С Linq, просто получив первый результат:
string result = list.FirstOrDefault(s => s.Contains(srch));
Чтобы сделать это без Linq (например, для более ранней версии .NET, такой как .NET 2.0), вы можете использовать метод List<T>
FindAll
, который в этом случае возвратит все элементы в списке, которые содержат поисковый запрос
var resultList = list.FindAll(delegate(string s) { return s.Contains(srch); });
Ответ 2
Чтобы вернуть все th записи:
IEnumerable<string> result = list.Where(s => s.Contains(search));
Только первый:
string result = list.FirstOrDefault(s => s.Contains(search));
Ответ 3
То, что вы написали, вызывает ошибку компиляции
Наилучшее перегруженное соответствие метода для 'string.Substring(int)' имеет некоторые недопустимые аргументы
Подстрока используется для получения части строки с использованием положения символа и/или длины результирующей строки.
например
srch.Substring(1, 3)
возвращает строку "her"
Как уже упоминалось, вы должны использовать Contains
, который говорит вам, что одна строка встречается внутри другой. Если вы хотите узнать фактическое положение, которое вы использовали бы IndexOf
Ответ 4
Мне нравится использовать indexOf или содержит
someString.IndexOf("this");
someString.Contains("this");
Ответ 5
та же проблема, которую я должен был сделать.
Вам нужно следующее:
myList.Where(listStrinEntry => myString.IndexOf(listStringEntry) != -1)
Где:
myList
есть List<String>
имеет значения
что myString
должен содержать в любой позиции
Так де-факто вы ищете, если myString содержит какие-либо записи из списка.
Надеюсь, это то, что вы хотели...
Ответ 6
И для использования с CaseSensitive
:
YourObj yourobj = list.FirstOrDefault(obj => obj.SomeString.ToLower().Contains("some substring"));
ИЛИ ЖЕ
YourObj yourobj = list.FirstOrDefault(obj => obj.SomeString.ToUpper().Contains("some substring"));