检查列表是否包含包含string的元素并获取该元素

在search这个问题的答案时,我遇到了使用LINQ的类似的问题,但我还没有能够完全理解它们(因此,实现它们),因为我不熟悉它。 我想基本上是这样的:

  1. 检查列表中的任何元素是否包含特定的string。
  2. 如果有,请获取该元素。

我真的不知道如何去做这件事。 我能想出的是这个(当然不工作):

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]; } }