C#实现字符串数组差集元素打印及删除的代码逻辑问题排查
代码问题说明
你写的实现有3个核心逻辑错误,根本跑不出预期效果:
- 嵌套循环判断逻辑完全写反:当前逻辑是拿string2的每个元素,和string1里的单个元素逐个比对,只要和某一个元素不相等就判定为不匹配。比如string2里的"1",和string1里的"2"比对时不相等,就会被误判为非法元素,完全不是「元素不在整个string1数组中」的判断逻辑。
- C#中数组是定长结构,不支持遍历过程中直接删除元素;而且字符串是不可变类型,
string.Replace()方法会返回替换后的新字符串,不会修改原变量内容,你写的var2.Replace(var2, "")是完全无效的操作,改不了原数组的任何内容。 - 你写的
Consoleprint不是C#的原生输出方法,正确的控制台输出方法是Console.WriteLine()。
可直接运行的正确实现
不用搞嵌套循环,也不用折腾遍历中删元素的逻辑,用哈希集做存在性判断效率更高,最后统一重组数组即可:
string[] string1 = { "1", "2", "3" }; string[] string2 = { "1", "2", "3", "hello" }; // 把合法元素存入哈希集,判断存在的时间复杂度从O(n)降到O(1) HashSet<string> validElements = new HashSet<string>(string1); List<string> filteredResult = new List<string>(); foreach (string item in string2) { if (!validElements.Contains(item)) { // 打印不匹配的元素 Console.WriteLine(item); } else { // 保留符合要求的元素 filteredResult.Add(item); } } // 把过滤后的结果转回数组,覆盖原string2 string2 = filteredResult.ToArray();
运行后效果:
- 控制台会准确打印出不匹配元素
hello - 处理完成后的string2数组只保留
"1"、"2"、"3"三个元素,完全匹配需求。
内容的提问来源于stack exchange,提问作者jackermut
相关产品推荐
相关产品推荐

