检查列表是否包含包含string的元素并获取该元素
在search这个问题的答案时,我遇到了使用LINQ的类似的问题,但我还没有能够完全理解它们(因此,实现它们),因为我不熟悉它。 我想基本上是这样的:
- 检查列表中的任何元素是否包含特定的string。
- 如果有,请获取该元素。
我真的不知道如何去做这件事。 我能想出的是这个(当然不工作):
if (myList.Contains(myString)) string element = myList.ElementAt(myList.IndexOf(myString));
我知道为什么它不工作:
-
myList.Contains()
不返回true
,因为它将检查列表的整个元素是否与我指定的string匹配。 -
myList.IndexOf()
将不会查找出现,因为它再次是这样,它将检查匹配string的元素。
不过,我不知道如何解决这个问题,但我想我将不得不使用类似的问题build议使用LINQ。 这就是说,如果是这种情况,我想让回答者向我解释在他们的例子中使用LINQ(正如我所说的,在我用C#的时候,我没有打扰过它)。 提前谢谢你(和加尔斯?)。
编辑:我想出了一个解决scheme; 只是遍历列表,检查当前元素是否包含string,然后设置一个string等于当前元素。 我想知道,有没有比这更有效的方法?
string myString = "bla"; string element = ""; for (int i = 0; i < myList.Count; i++) { if (myList[i].Contains(myString)) element = myList[i]; }
你应该可以在这里使用Linq:
var matchingvalues = myList .Where(stringToCheck => stringToCheck.Contains(myString));
如果你只是想返回第一个匹配的项目:
var match = myList .FirstOrDefault(stringToCheck => stringToCheck.Contains(myString)); if(match != null) //Do stuff
基本的答案是你需要遍历循环,并检查任何元素包含指定的string。 所以,让我们说代码是
foreach(string item in myList) { if(item.Contains(myString)) return item; }
等效但简洁的代码是
mylist.Where(x => x.Contains(myString)).FirstOrDefault();
这里,x是代表上面代码中的项目的参数。
string result = myList.FirstOrDefault(x => x == myString) if(result != null) { //found }
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; } }
旧时尚圈几乎总是最快的。
如果你想要一个包含你的string的string列表:
var newList = myList.Where(x => x.Contains(myString)).ToList();
另一个select是使用Linq FirstOrDefault
var element = myList.Where(x => x.Contains(myString)).FirstOrDefault();
请记住, Contains
方法是区分大小写的。
你可以使用Linq的FirstOrDefault
扩展方法:
string element = myList.FirstOrDefault(s => s.Contains(myString));
这将返回包含子stringmyString
第一个元素,如果没有find这个元素,则返回null
。
如果您只需要索引,请使用List<T>
类的FindIndex
方法:
int index = myList.FindIndex(s => s.Contains(myString));
这将返回包含子stringmyString
的第一个元素的索引,如果没有find这样的元素,则返回-1
。
您可以使用
var match=myList.Where(item=>item.Contains("Required String")); foreach(var i in match) { //do something with the matched items }
LINQ为您提供了“查询”任何数据集合的function。 你可以在集合(这里是string的集合(列表))上使用像数据库查询(select,where等)的语法。
所以你这样做就像“让我的项目从列表中满足给定的条件”
在你使用“lambdaexpression式”的地方
简单地告诉lambdaexpression式就像(input参数=>返回值)
所以对于参数“item”,它返回“item.Contains(”需要的string“)”。 因此,如果项目包含string,则返回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]; } }