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”、“ab c”
2 回答
![?](http://img1.sycdn.imooc.com/533e4d2600013fe202000200-100-100.jpg)
FFIVE
TA贡献1797条经验 获得超6个赞
var invalid = words.Where(w => !w.All(allowedChars.Contains));
它检查每个单词中是否至少有一个字符不包含在allowedChars
.
这是相同的,但更详细一点:
var invalid = words.Where(w => w.Any(c => !allowedChars.Contains(c)));
如果找到第一个未包含的字符,两者都会停止执行。
正如 Juharr 所指出的,如果允许使用多个字符,您可以通过使用 aHashSet<char>
而不是 来提高效率String
:
var alloweCharSet = new HashSet<char>(allowedChars);
![?](http://img1.sycdn.imooc.com/54584f3100019e9702200220-100-100.jpg)
繁花不似锦
TA贡献1851条经验 获得超4个赞
返回包含除 allowedChars 之外的任何其他字符的所有单词:
var result = words.Where(w => w.Except(allowedChars).Any());
虽然这给出了预期的结果,但有人指出,这将通过调用 ExtSet
为列表中的allowedChars
每个创建一个新word
的。这可能不会提供最佳性能。
- 2 回答
- 0 关注
- 265 浏览
添加回答
举报
0/150
提交
取消