Check if list contains element that contains a string and get that element
在寻找这个问题的答案时,我遇到过使用LINQ的类似问题,但是我还没有完全理解它们(因此,实现它们),因为我不熟悉它。基本上,我想做的是:
我真的不知道该怎么做。我能想到的是(当然不起作用):
1 2 | if (myList.Contains(myString)) string element = myList.ElementAt(myList.IndexOf(myString)); |
我知道为什么它不起作用:
myList.Contains() 不返回true ,因为它将检查列表的整个元素是否与指定的字符串匹配。myList.IndexOf() 将找不到匹配项,因为它将再次检查是否有与字符串匹配的元素。
尽管如此,我还是不知道如何解决这个问题,但我想我将不得不使用与我类似的问题中建议的LINQ。也就是说,如果是这样的话,我想让回答者向我解释一下Linq在他们的例子中的用法(正如我所说,我在使用c的时候并没有对此感到困扰)。提前感谢各位(和姑娘们?).
编辑:我提出了一个解决方案;只需遍历列表,检查当前元素是否包含该字符串,然后设置一个等于当前元素的字符串。不过,我想知道有没有比这更有效的方法?
1 2 3 4 5 6 7 8 | string myString ="bla"; string element =""; for (int i = 0; i < myList.Count; i++) { if (myList[i].Contains(myString)) element = myList[i]; } |
您应该能够在这里使用LINQ:
1 2 | var matchingvalues = myList .Where(stringToCheck => stringToCheck.Contains(myString)); |
如果您只想返回第一个匹配项:
1 2 3 4 5 | var match = myList .FirstOrDefault(stringToCheck => stringToCheck.Contains(myString)); if(match != null) //Do stuff |
基本答案是:您需要遍历循环并检查包含指定字符串的任何元素。那么,假设代码是:
1 2 3 4 5 | foreach(string item in myList) { if(item.Contains(myString)) return item; } |
等效但简明扼要的代码是:
1 | mylist.Where(x => x.Contains(myString)).FirstOrDefault(); |
这里,x是一个参数,在上面的代码中的作用类似于"item"。
1 2 3 4 5 | string result = myList.FirstOrDefault(x => x == myString) if(result != null) { //found } |
1 2 3 4 5 6 7 | 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; } } |
旧的时装圈几乎总是最快的。
如果需要包含字符串的字符串列表:
1 | var newList = myList.Where(x => x.Contains(myString)).ToList(); |
另一种选择是使用Linq FirstOrDefault
1 | var element = myList.Where(x => x.Contains(myString)).FirstOrDefault(); |
记住,
您可以使用linq的
1 | string element = myList.FirstOrDefault(s => s.Contains(myString)); |
这将返回包含子字符串
如果只需要索引,则使用
1 | int index = myList.FindIndex(s => s.Contains(myString)); |
如果没有找到子字符串
这里有很多很好的答案,但我使用的是一个简单的方法,如下所示:
1 2 3 4 5 6 7 8 | 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); } |
你可以使用
1 2 3 4 5 | var match=myList.Where(item=>item.Contains("Required String")); foreach(var i in match) { //do something with the matched items } |
Linq为您提供了"查询"任何数据集合的功能。您可以对集合(这里是字符串的集合(列表))使用类似数据库查询(select、where等)的语法。
所以你的做法是"从满足给定条件的列表中获取项目"
在使用"lambda表达式"的位置中
简单地说,lambda表达式类似于(输入参数=>返回值)
因此,对于参数"item",它返回"item.contains"("必需字符串")。因此,如果项包含字符串,则返回"真",从而从列表中选择它,因为它满足条件。
为了保持简单,使用这个;
1 2 3 4 5 6 7 | 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循环执行此操作,请使用它;
1 2 3 4 5 6 7 | for (int iterator = 0; iterator < myList.Count; iterator++) { if (myList[iterator].Contains("String Pattern")) { return myList[iterator]; } } |
我在其他答案中没有看到bool选项,所以我希望下面的代码可以帮助一些人。
只需使用
1 2 3 | string myString ="test"; bool exists = myList .Where(w => w.COLUMN_TO_CHECK.Contains(myString)).Any(); |