C#如何从单个数组拆分出正负数组且避免输出空元素
解决数组拆分问题:提取正负数并避免输出默认0
你的问题在于初始化的数组长度和原数组一致,但实际存入的元素数量更少,多余的位置会保留int类型的默认值0,导致输出时出现无效内容。以下是三种实用的解决方案:
方法1:用动态集合List(最推荐,新手友好)
List可以动态添加元素,不用提前指定长度,最后转成数组即可,完全避免空位置问题:
int[] array = { 12, 23, -22, -823, -4, 351, -999, 62 }; // 分别创建正、负数的动态集合 List<int> negativniList = new List<int>(); List<int> pozitivniList = new List<int>(); // 遍历原数组分类添加 foreach (int num in array) { if (num < 0) { negativniList.Add(num); } else { pozitivniList.Add(num); } } // 转成数组(如果业务需要数组类型) int[] arrayNegativni = negativniList.ToArray(); int[] arrayPozitivni = pozitivniList.ToArray(); // 输出负数数组(无多余0) foreach (var item in arrayNegativni) { Console.WriteLine(item); } // 输出正数数组 foreach (var item in arrayPozitivni) { Console.WriteLine(item); }
方法2:先统计数量再创建对应长度的数组
如果不想用集合,纯数组操作的话,可以先遍历一次统计正负数的数量,再创建刚好长度的数组:
int[] array = { 12, 23, -22, -823, -4, 351, -999, 62 }; // 第一步:统计正、负数的数量 int negCount = 0; int posCount = 0; foreach (int num in array) { if (num < 0) negCount++; else posCount++; } // 第二步:创建对应长度的数组 int[] arrayNegativni = new int[negCount]; int[] arrayPozitivni = new int[posCount]; // 第三步:填充数组 int negIndex = 0; int posIndex = 0; foreach (int num in array) { if (num < 0) { arrayNegativni[negIndex] = num; negIndex++; } else { arrayPozitivni[posIndex] = num; posIndex++; } } // 输出结果 foreach (var item in arrayNegativni) { Console.WriteLine(item); } foreach (var item in arrayPozitivni) { Console.WriteLine(item); }
方法3:用LINQ快速实现(代码最简洁)
如果熟悉LINQ,可以一行代码完成数组拆分,非常高效:
// 需先引入命名空间 using System.Linq; int[] array = { 12, 23, -22, -823, -4, 351, -999, 62 }; // 筛选负数并转成数组 int[] arrayNegativni = array.Where(num => num < 0).ToArray(); // 筛选正数(若需包含0,改为num >= 0) int[] arrayPozitivni = array.Where(num => num > 0).ToArray(); // 输出 foreach (var item in arrayNegativni) { Console.WriteLine(item); } foreach (var item in arrayPozitivni) { Console.WriteLine(item); }
补充小提示
原代码里变量名arrayPozitivni存的是负数,逻辑和命名不符,建议改成arrayNegativni(负数数组),正数数组用arrayPozitivni,避免后续维护混淆。
内容的提问来源于stack exchange,提问作者Alexis
相关产品推荐
相关产品推荐

