使用For循环+ If语句从数组中删除元素 - C#

时间:2015-09-29 22:38:56

标签: c# arrays

我有一个数组,TempArray [] = {1,3,-1,5,7,-1,4,10,9,-1}

我想从这个数组中删除每一个-1并将剩下的数组复制到一个名为Original的新数组中,该数组应输出数字为1,3,5,7,4,10,9

我只能在for循环中使用if语句!

这是我到目前为止所做的,但我一直收到一条错误消息,System.IndexOutOfRangeException

    for (int i = 0; i < TempArray.Length; i++)
        {
            if (TempArray[i] != -1)
            {
                //error occurs at this line
                //My attempt is to set the new array, Original[i] equal to TempArray[i] only where the values are not -1.
                TempArray[i] = Original[i];
            }
        }

4 个答案:

答案 0 :(得分:3)

如果只能在for循环中使用If语句。这看起来像一个学校项目。首先,计算阵列中有多少非负数。创建具有该长度的新数组并填充该数组。

int[] TempArray = new int[] {1,3,-1,5,7,-1,4,10,9,-1};
int[] Original ; 
int countNonNegative=0;
 for (int i = 0; i < TempArray.Length; i++)
{
            if (TempArray[i] != -1)
            {
                countNonNegative++;
            }
 }
    Original = new int[countNonNegative];
    int index=0;
    for (int i = 0; i < TempArray.Length; i++)
    {
            if (TempArray[i] != -1)
            {
                Original[index] = TempArray[i];
                index++;
            }
    }
    Console.WriteLine("Original Length = "+Original.Length);

答案 1 :(得分:2)

 using System.Linq;

 int[] withoutNegativeOnes = myArray
   .Where(a => a != -1)
   .ToArray();

答案 2 :(得分:1)

var Original = new int[TempArray.Length];
var originalCounter = 0;

for (int i = 0; i < TempArray.Length; i++)
{
    if (TempArray[i] != -1)
    {
        Original[originalCounter++] = TempArray[i];
    }
}

现在Original可能在末尾包含空格,但是你拥有的所有元素都不是-1。您可以使用以下代码迭代值:

for (int i = 0; i < originalCounter; i++)
{
    Console.WriteLine(Original[i]);
}

那是因为originalCounter的最后一个索引值没有从TempArray的迭代中填充。

答案 3 :(得分:-1)

尝试这个

int[] TempArray = { 1, 3, -1, 5, 7, -1, 4, 10, 9, -1 };

int[] original = TempArray.Where(i => i != -1).ToArray();

foreach(int i in original)
   Console.WriteLine(i.ToString());