如何在C#中删除2D数组中的行和列?

时间:2014-10-10 15:35:53

标签: c# multidimensional-array delete-row

如何从C#中的2D数组中删除特定的行和列?

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

假设我要删除第i列和第i列(跳过它们)...对于nXn数组而不仅仅是3x3并将剩余的数组存储在新数组中... 所以输出将是:

{5,6},{8,9}

4 个答案:

答案 0 :(得分:5)

没有内置的方法可以做到这一点,你可以自己做:

 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;
        }

答案 1 :(得分:1)

不,数组不允许你这样做。您可以为此创建自己的数据结构,但它不会非常简单(例如,如果您只想删除行,则不同)。

对于简单的操作,在底层数组之上构建一个类就足够了,并处理重新索引以将虚拟2D数组映射到下面的物理数组。但是,当你将删除和添加结合起来并使整个阵列变形时,它会变得有点棘手。

答案 2 :(得分:1)

非常简单的逻辑。只需玩循环:

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];
    }
}

答案 3 :(得分:0)

我创建了这个方法,看看

 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;

    }

有一些超出范围,这显然是为什么但我试图到达那里......