如何在数组中排除零输出?

时间:2017-10-25 16:23:45

标签: c# arrays

我有这个代码。我想只显示大于0的数组部分。 例如......输入一堆数字并存储为变量。但并非所有数组中的变量都会被使用。那些没有存储为0.所以当我显示数组时,数字显示为: " 140,180,298,130,0,0,0,0,0,0,0,0,0,0,0和#34;等等 我不希望显示零。

int[] scores = {score1, score2, score3, score4, score5, score6, score7, score8, score9, score10, score11, score12, score13, score14, score15};

Console.WriteLine("Your scores as you entered them: " + (string.Join(", ", scores)));
Console.ReadKey();

3 个答案:

答案 0 :(得分:8)

使用linq的Where

string.Join(", ", scores.Where(x => x != 0))

在上面的描述中,您还说数组中大于0的部分。因此,如果是这种情况,您可以将其更改为:

string.Join(", ", scores.Where(x => x > 0))

对于非linq解决方案,请使用List<int>和简单的foreach(或for)循环:

List<int> result = new List<int>();
foreach(int item in scores)
{
    if(item != 0)
        result.Add(item);
}

答案 1 :(得分:1)

如果您还不了解LINQ,可以查看以下代码:

int[] scores = { 1, 2, 3, 0, 0, 4, 5, 0, 0, 6};

int[] withoutZeros = WithoutZeros (scores);

核心方法:

public static int[] WithoutZeros (int[] input)
{
    int zerosCount = 0; // we need to count how many zeros are in the input array

    for (int i = 0; i < input.Length; i++)
    {
        if (input[i] == 0) zerosCount = zerosCount + 1;
    }

    // now we know number of zeros, so we can create output array
    // which will be smaller than then input array (or not, if we don't have any zeros in the input array)

    int[] output = new int[input.Length - zerosCount]; // can be smaller, equal, or even empty

    // no we need to populate non-zero values from the input array to the output array

    int indexInOutputArray = 0;

    for (int i = 0; i < input.Length; i++)
    {
        if (input[i] != 0)
        {
            output[indexInOutputArray] = input[i];

            indexInOutputArray = indexInOutputArray + 1;
        }
    }

    return output;
}

答案 2 :(得分:0)

要获得问题的答案,请查看Gilad Green的答案。

我只想给你一些关于我看到的代码的反馈。

因为,我没有看到你的所有代码,我在这里做了很多假设,如果我错了,那就很抱歉。

如果要使用15个值填充数组,则应考虑重构代码以使用循环。

在下面的示例中,我将使用for循环,但可以使用不同的循环来解决。

int[] scores = new int[15]; //initialize an array of ints with a length of 15
for (int i = 0; i < scores.Length; i++) //loop from 0 till smaller than the length of the array (0-14 = 15 iterations)
    scores[i] = int.Parse(Console.ReadLine()); //fill the scores array with the index of i with the console input