You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 06:10:34