如何使用LinQ搜索不在char数组中的字符串

时间:2018-08-09 12:32:01

标签: c# list linq

List<string> words = new List<string> { "abc", "acb", "cba", "cb a", "abf", "sea", "aba", "so ap", "a b c" }; 
string allowedChars = "abc";

我想检查列表字符串中的无效字符。我尝试使用IndexOfAny(),但IndexOfAny()不检查空格。如何检查包含无效字符的字符串?

我想要的结果:“ cb a”,“ abf”,“ sea”,“ so ap”,“ a b c”

2 个答案:

答案 0 :(得分:9)

2.0 (22.04.2016)
~~~~~~~~~~~~~~~~    
* Fix: prefetch_related on a ClusterTaggableManager no longer fails (but doesn't prefetch either)        

它会检查每个单词中是否有至少一个不包含在var invalid = words.Where(w => !w.All(allowedChars.Contains)); 中的字符。

这是相同的,但有点冗长:

allowedChars

如果他们发现第一个不包含的字符,则停止执行。

如Juharr所指出的那样,如果允许使用许多字符,则可以使用var invalid = words.Where(w => w.Any(c => !allowedChars.Contains(c))); 代替HashSet<char>来提高效率:

String

答案 1 :(得分:3)

返回所有包含除allowedChars外的其他字符的单词:

X-SENDFILE

尽管这样做可以达到预期的结果,但有人指出,这将通过调用Except为列表中的每个var result = words.Where(w => w.Except(allowedChars).Any()); 的{​​{1}}创建一个新的Set。这可能无法提供最佳性能。