Check if a string within a list contains a specific string with Linq
我有一个List,它有一些像这样的项目:
1
| {"Pre Mdd LH","Post Mdd LH","Pre Mdd LL","Post Mdd LL"} |
现在,我要执行一个条件,检查列表中的项目是否包含特定的字符串。类似:
IF list contains an item that contains this_string
为了简单起见,我想至少签入一个"如果"列表!例如,包含一个包含Mdd LH的项。
我的意思是:
1 2 3 4
| if(myList.Contains(str => str.Contains("Mdd LH))
{
//Do stuff
} |
谢谢。
我想你要的是Any:
1
| if (myList.Any(str => str.Contains("Mdd LH"))) |
很值得熟悉LINQ标准查询操作符;我通常使用那些方法,而不是实现特定的方法(如List.ConvertAll),除非我对特定操作符的性能感到真正的困扰。(通过了解结果的大小等,实现特定的方法有时更有效。)
- 我们如何才能使它不区分大小写搜索?包含没有该重载方法。
- @Ankur-M:你可以用IndexOf代替,传入StringComparison。如果这还不够详细,请提出一个新问题(当然,在搜索现有问题之后)。
- 我可以用indexof来实现。但是我必须使用findindex而不是任何。我还在找为什么没人能用。是的,我在第一次搜索中找不到类似的帖子。非常感谢你的帮助!
- @Ankur-M:如果你还是很困惑,我建议你问一个新问题——如果你不需要索引,那么任何一个都可以。
- 我会在做更多的分析之后创建一个问题。
- 我实际上能够理解这个问题,所以没有提出新的问题。我在下面使用它来工作:searchText.any(x=>x.indexof(eachword,stringComparison.ordinalIgnoreCase)>=0。在我使用<0之前(因为我不需要匹配条件),它总是返回"true"。我应该用==0。最后,我将代码更改为:searchText.any(x=>x.indexof(string.format("0",eachword),stringComparison.ordinalIgnoreCase)>=0),将其更改为"精确单词"匹配,当然是在输入字符串的开头和结尾填充空格。再次感谢!:)
- 如果试图在没有空字符串的字符串列表中找到空字符串,为什么返回true?例如,如果"val"是空字符串,"list"不包含任何空字符串,则if(list.any(str=>str.contains(val))返回true。dotnefiddle.net/jne3fe
- @因为任何字符串"包含"空字符串。这更多是关于string.Contains而不是Any。请参阅docs.microsoft.com/en-us/dotnet/api/&hellip;
他应该很容易
1 2 3
| if( myList.Any( s => s.Contains(stringToCheck))){
//do your stuff here
} |
linq any()将执行以下操作:
1
| bool contains = myList.Any(s => s.Contains(pattern)); |
任何(),MSDN:
Determines whether any element of a sequence satisfies a condition
试试这个:
1
| bool matchFound = myList.Any(s => s.Contains("Mdd LH")); |
Any()在找到匹配项时将停止搜索,因此这项任务非常有效。
如果你使用含有,你可能会得到假阳性。假设您有一个字符串包含这样的文本:"我的文本数据mdd lh"使用contains方法,此方法将为调用返回true。方法是使用等于运算符:
bool exists = myStringList.Any(c=>c =="Mdd LH")
- 这正是海报想要完成的,在SQL中是"类似"的,所以我想这些都是"积极的积极因素",不需要等量的东西。