9

How to delete a specific row and column from 2D array in C#?

int[,] array= {{1,2,3},{4,5,6},{7,8,9}};

lets say I want to delete row i and column i (skipping them) ... for nXn array not just 3x3 and store the remaining array in a new array... so the output would be:

{5,6},{8,9}
WT86
  • 823
  • 5
  • 13
  • 34

4 Answers4

9

There's no built-in way to do that, you can do it yourself:

 static void Main()
        {
            int[,] array = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
            var trim = TrimArray(0, 2, array);
        }


        public static int[,] TrimArray(int rowToRemove, int columnToRemove, int[,] originalArray)
        {
            int[,] result = new int[originalArray.GetLength(0) - 1, originalArray.GetLength(1) - 1];

            for (int i = 0, j = 0; i < originalArray.GetLength(0); i++)
            {
                if (i == rowToRemove)
                    continue;

                for (int k = 0, u = 0; k < originalArray.GetLength(1); k++)
                {
                    if (k == columnToRemove)
                        continue;

                    result[j, u] = originalArray[i, k];
                    u++;
                }
                j++;
            }

            return result;
        }
brz
  • 5,926
  • 1
  • 18
  • 18
2

Very simple logic. Just play with the loop:

int[,] array = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int[,] arrayskip = new int[array.GetLength(0) - 1, array.GetLength(1) - 1];

for (int i = 1; i < array.GetLength(0); i++)
{
    for (int j = 1; j < array.GetLength(1); j++)
    {
        arrayskip[i - 1, j - 1] = array[i, j];
    }
}
Shaharyar
  • 12,254
  • 4
  • 46
  • 66
1

No, arrays don't let you do that. You could make your own data structure for that, but it's not going to be exactly simple (unlike if you only wanted to be able to remove rows, for example).

For simple operations, it would be quite enough to build a class on top of an underlying array, and handle the re-indexing to map the virtual 2D array to the physical array underneath. But it's going to get a bit tricky as you combine removals and additions, and deform the array overall.

Luaan
  • 62,244
  • 7
  • 97
  • 116
  • OP asked to skip some items and store it in a new array. Not actually asked for deleting an array's item. – Shaharyar Oct 10 '14 at 15:40
  • it's not like real deleting it's just skipping specific elements and store the remaining in a new array... that's it – WT86 Oct 10 '14 at 15:42
  • @WT86 Well, in that case, a simple for-cycle will do. So what is your question, and where's your work? :D – Luaan Oct 10 '14 at 15:44
0

I created this method, have a look

 public static double[,] fillNewArr(double[,] originalArr, int row, int col)
    {
        double[,] tempArray = new double[originalArr.GetLength(0) - 1, originalArr.GetLength(1) - 1];
        int newRow = 0;
        int newCol = 0;
        for (int i = 0; i < originalArr.GetLength(0); i++)
        {
            for (int j = 0; j < originalArr.GetLength(1); j++)
            {
                if(i != row && j != col)
                {
                    tempArray[newRow, newCol] = originalArr[i, j];
                    newRow++;
                    newCol++;
                }

            }

        }
        return tempArray;

    }

having some out of range, It's obvious why but I'm trying to get there...

WT86
  • 823
  • 5
  • 13
  • 34