一尘不染

如何在C#中调整多维(2D)数组的大小?

c#

我尝试了以下操作,但它只返回一个错误的数组。

    T[,] ResizeArray<T>(T[,] original, int rows, int cols)
    {
        var newArray = new T[rows,cols];
        Array.Copy(original, newArray, original.Length);
        return newArray;
    }

阅读 419

收藏
2020-05-19

共1个答案

一尘不染

谢谢托马斯,您的解释非常有帮助,但是您实施的解决方案太慢了。我对其进行了修改,以充分利用Array.Copy。

    void ResizeArray<T>(ref T[,] original, int newCoNum, int newRoNum)
    {
        var newArray = new T[newCoNum,newRoNum];
        int columnCount = original.GetLength(1);
        int columnCount2 = newRoNum;
        int columns = original.GetUpperBound(0);
        for (int co = 0; co <= columns; co++)
            Array.Copy(original, co * columnCount, newArray, co * columnCount2, columnCount);
        original = newArray;
    }

在这里,我假设行多于列,因此我将数组构造为[列,行]。这样一来,我就可以在一列中对整个列使用Array.Copy(一次快于一个单元格)。

它仅可用于增加数组的大小,但也可以对其进行调整以减小大小。

2020-05-19