Проверьте, содержит ли list элемент, содержащий строку, и получите этот элемент
при поиске ответа на этот вопрос я столкнулся с аналогичными, использующими 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));
это вернет элемент fist, содержащий подстроку 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 loop, используйте это;
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);
}