Проверьте, содержит ли список элемент, содержащий строку, и получите этот элемент
при поиске ответа на этот вопрос я столкнулся с аналогичными, использующими LINQ, но я не смог полностью понять их (и, следовательно, реализовать их), поскольку я не знаком с ним. Что я хотел бы, в основном, это:
- проверьте, содержит ли какой-либо элемент списка определенную строку.
- если это так, получить этот элемент.
Я честно не знаю, как бы я это сделал. Что я могу придумать это (не работает, конечно):
if (myList.Contains(myString))
string element = myList.ElementAt(myList.IndexOf(myString));
Я знаю, почему это не работает:
myList.Contains()не возвращаетtrue, так как он будет проверять, соответствует ли весь элемент списка указанной строке.
myList.IndexOf()не найдет вхождения, так как, как это происходит снова, он будет проверять наличие элемента, соответствующего строке.
тем не менее, я понятия не имею, как решить эту проблему, но я полагаю, что мне придется использовать LINQ, как это предлагается в похожие вопросы и ко мне. При этом, если это так, я хотел бы, чтобы ответчик объяснил мне использование LINQ в своем примере (как я уже сказал, Я не беспокоился об этом в свое время с C#). Заранее спасибо ребятам (а девчонки?).
EDIT: я придумал решение; просто пройдите по списку, проверьте, содержит ли текущий элемент строку, а затем установите строку, равную текущему элементу. Мне интересно, есть ли более эффективный способ, чем это?
string myString = "bla";
string element = "";
for (int i = 0; i < myList.Count; i++)
{
if (myList[i].Contains(myString))
element = myList[i];
}
9 ответов:
вы должны быть в состоянии использовать LINQ здесь:
var matchingvalues = myList .Where(stringToCheck => stringToCheck.Contains(myString));Если вы просто хотите вернуть первого совпадающего элемента:
var match = myList .FirstOrDefault(stringToCheck => stringToCheck.Contains(myString)); if(match != null) //Do stuff
основной ответ: вам нужно перебрать цикл и проверить, что любой элемент содержит указанную строку. Итак, предположим, что код:
foreach(string item in myList) { if(item.Contains(myString)) return item; }эквивалентный, но краткий, код:
mylist.Where(x => x.Contains(myString)).FirstOrDefault();здесь x-это параметр, который действует как "элемент" в приведенном выше коде.
for (int i = 0; i < myList.Length; i++) { if (myList[i].Contains(myString)) // (you use the word "contains". either equals or indexof might be appropriate) { return i; } }старомодные петли почти всегда самые быстрые.
Если вы хотите получить список строк, содержащих строку:
var newList = myList.Where(x => x.Contains(myString)).ToList();другой вариант-использовать Linq FirstOrDefault
var element = myList.Where(x => x.Contains(myString)).FirstOrDefault();имейте в виду, что
Containsметод чувствителен к регистру.
вы можете использовать Linq
FirstOrDefaultметод расширения:string element = myList.FirstOrDefault(s => s.Contains(myString));это вернет первый элемент, который содержит подстроку
myStringилиnullесли такой элемент не найден.если все, что вам нужно-это индекс, используйте
List<T>классаFindIndexспособ:int index = myList.FindIndex(s => s.Contains(myString));это вернет индекс элемента fist, который содержит подстроку
myStringили-1если такой элемент не найден.
можно использовать
var match=myList.Where(item=>item.Contains("Required String")); foreach(var i in match) { //do something with the matched items }LINQ предоставляет вам возможности для "запроса" любой коллекции данных. Вы можете использовать синтаксис, такой как запрос базы данных (select, where и т. д.) В коллекции (здесь коллекция (список) строк).
таким образом, Вы делаете, как "получить мне элементы из списка, где он удовлетворяет заданному условию"
внутри, где вы используете "лямбда"
кратко сказать лямбда-выражение это что-то вроде (input параметр => возвращаемое значение)
поэтому для параметра " item "он возвращает" item.Содержит("обязательная строка")" . Таким образом, он возвращает true, если элемент содержит строку, и тем самым он выбирается из списка, поскольку он удовлетворяет условию.
чтобы сохранить его простым использовать это;
foreach(string item in myList)//Iterate through each item. { if(item.Contains("Search Term")//True if the item contains search pattern. { return item;//Return the matched item. } }в качестве альтернативы, чтобы сделать это с помощью цикла for, используйте это;
for (int iterator = 0; iterator < myList.Count; iterator++) { if (myList[iterator].Contains("String Pattern")) { return myList[iterator]; } }
здесь много хороших ответов, но я использую простой, используя , как показано ниже:
foreach (var setting in FullList) { if(cleanList.Exists(x => x.ProcedureName == setting.ProcedureName)) setting.IsActive = true; // do you business logic here else setting.IsActive = false; updateList.Add(setting); }
Comments