检查list是否包含包含字符串的元素并获取该元素

Dim*_*dis 125 .net c# linq contains list

在寻找这个问题的答案时,我遇到过类似的问题,但是我还没有完全理解它们(因此,实现它们),因为我对它并不熟悉.基本上,我想要的是:

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

老实说,我不知道我会怎么做.我能想到的是这个(当然不起作用):

if (myList.Contains(myString))
    string element = myList.ElementAt(myList.IndexOf(myString));
Run Code Online (Sandbox Code Playgroud)

我知道为什么它不起作用:

  • myList.Contains()不返回true,因为它将检查列表的整个元素是否与我指定的字符串匹配.
  • myList.IndexOf() 将找不到事件,因为再次出现这种情况,它将检查与字符串匹配的元素.

尽管如此,我还不知道如何解决这个问题,但我认为我必须按照类似问题的建议使用LINQ.话虽如此,如果是这种情况,我希望回答者在他们的例子中向我解释LINQ的使用(正如我所说的,我在C#时代并没有对它感到困扰).先谢谢你们(和加尔斯?).

编辑:我想出了一个解决方案; 只需遍历列表,检查当前元素是否包含字符串,然后设置一个等于当前元素的字符串.我想知道,有没有比这更有效的方法?

string myString = "bla";
string element = "";

for (int i = 0; i < myList.Count; i++)
{
    if (myList[i].Contains(myString))
        element = myList[i];
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ish 179

你应该可以在这里使用Linq:

var matchingvalues = myList
    .Where(stringToCheck => stringToCheck.Contains(myString));
Run Code Online (Sandbox Code Playgroud)

如果您只想返回第一个匹配项:

var match = myList
    .FirstOrDefault(stringToCheck => stringToCheck.Contains(myString));

if(match != null)
    //Do stuff
Run Code Online (Sandbox Code Playgroud)

  • "Any" 会更好用 var matchingvalues = myList .Any(stringToCheck =&gt; stringToCheck.Contains(myString)); (3认同)

use*_*rda 27

基本答案是:您需要遍历循环并检查包含指定字符串的任何元素.所以,让我们说代码是:

foreach(string item in myList)
{
    if(item.Contains(myString))
       return item;
}
Run Code Online (Sandbox Code Playgroud)

等效但简洁的代码是:

mylist.Where(x => x.Contains(myString)).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

这里,x是一个参数,在上面的代码中就像"item".


Chr*_*ris 12

string result = myList.FirstOrDefault(x => x == myString)
if(result != null)
{
  //found
}
Run Code Online (Sandbox Code Playgroud)


McK*_*Kay 9

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

旧时尚圈几乎总是最快的.

  • 我没有对它进行过测试,但我猜这会更快.只需要一次通过列表,直到它找到一些东西并提前爆发(如Linq选项可能会写得好),没有linq的方法调用开销,或linq的lambda开销.并不是说那些引起关注的巨大原因,但可能会导致一些性能受到打击. (2认同)

Ale*_*ria 7

如果你想要一个包含你的字符串的字符串列表:

var newList = myList.Where(x => x.Contains(myString)).ToList();
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用 Linq FirstOrDefault

var element = myList.Where(x => x.Contains(myString)).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

请记住,该Contains方法区分大小写。