使用for循环从数组提取唯一值并填充列表的问题排查
数组提取唯一值的问题修复
你的代码存在两个关键错误:
- 第一行判断
if (numArray[i] != numArray[i])完全无效,一个值不可能不等于自身,直接导致后续逻辑从未执行。 - 嵌套循环逻辑错误:即便进入内层循环,只要
numArray[i] != numArray[j]就添加元素,会把同一个元素重复添加多次,根本达不到去重效果。
修正后的嵌套for循环实现
核心逻辑是遍历数组每个元素,检查该元素是否已存在于结果列表中,不存在则添加:
int[] numArray = new int[10] {1,2,2,3,3,4,4,5,5,9}; List<Int32> uNum = new List<Int32>(); for (int i = 0; i < numArray.Length; i++) { bool isUnique = true; // 检查当前元素是否已在结果列表中 for (int j = 0; j < uNum.Count; j++) { if (numArray[i] == uNum[j]) { isUnique = false; break; // 找到重复直接跳出循环,避免多余判断 } } if (isUnique) { uNum.Add(numArray[i]); } } // 测试输出 foreach (int num in uNum) { Console.WriteLine(num); }
更高效的HashSet实现
如果不限制必须用嵌套循环,HashSet<int>本身不允许重复元素,实现起来更高效:
int[] numArray = new int[10] {1,2,2,3,3,4,4,5,5,9}; HashSet<int> uniqueSet = new HashSet<int>(numArray); List<Int32> uNum = new List<int>(uniqueSet);
简洁的Linq实现
用Linq的Distinct()方法可以一行完成去重:
int[] numArray = new int[10] {1,2,2,3,3,4,4,5,5,9}; List<Int32> uNum = numArray.Distinct().ToList();
内容的提问来源于stack exchange,提问作者Iveri
相关产品推荐
相关产品推荐

