如何在C#中筛选出包含字符数组所有字符的字符串列表?
问题分析与解决
你的代码存在几个关键问题,导致无法正确筛选:
- 语法错误:内层foreach循环的括号写错了,
charsArray}应该改成charsArray) - 逻辑错误:只要字符数组里有一个字符被单词包含,就立刻把单词加入Final,这会导致不符合要求的单词(比如只包含部分字符)被错误添加,同时符合要求的单词会被重复添加多次(每匹配一个字符就加一次)
- 判断逻辑颠倒:应该检查单词是否缺少字符数组中的任意一个字符,一旦发现缺少就标记为不符合,只有当所有字符都被包含时才加入结果列表
修正后的基础循环写法
foreach (string word in List) { bool containsAll = true; foreach (char letter in charsArray) { // 只要有一个字符不在单词里,就标记为不符合,直接跳出内层循环 if (!word.Contains(letter)) { containsAll = false; break; } } // 所有字符都检查通过后,再添加到结果列表 if (containsAll) { Final.Add(word); } } foreach (string word in Final) { Console.WriteLine(word); }
更简洁的LINQ写法
如果用C#的LINQ可以一行完成筛选,代码更简洁易读:
Final = List.Where(word => charsArray.All(letter => word.Contains(letter))).ToList(); foreach (string word in Final) { Console.WriteLine(word); }
测试你给出的示例:
- charsArray为
{'a','e','i','z'} - List为
{"abcde","iertaz","aio","zzeml","amoioze"}
运行后会正确输出iertaz和amoioze
内容的提问来源于stack exchange,提问作者Mia
相关产品推荐
相关产品推荐

