我发现自己通过执行以下操作将1d字节和单个数组转换为2d。我怀疑它可能和其他方法一样快,但是也许有一个更简单的范例?(林肯?)

    private static byte[,] byte2D(byte[] input, int height, int width)
    {
        byte[,] output = new byte[height, width];
        for (int i = 0; i < height; i++)
        {
            for (int j = 0; j < width; j++)
            {
                output[i, j] = input[i * width + j];
            }
        }
        return output;
    }

    private static Single[,] single2D(byte[] input, int height, int width)
    {
        Single[,] output = new Single[height, width];
        for (int i = 0; i < height; i++)
        {
            for (int j = 0; j < width; j++)
            {
                output[i, j] = (Single)input[i * width + j];
            }
        }
        return output;
    }

最佳答案

这无助于使方法中的代码更干净,但我注意到有两个基本相同的方法,它们的类型不同。我建议使用generics
这将使您只定义一次方法。使用where关键字,甚至可以限制允许方法处理的类型。

private static T[,] Make2DArray<T>(T[] input, int height, int width)
{
    T[,] output = new T[height, width];
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            output[i, j] = input[i * width + j];
        }
    }
    return output;
}

你可以这样调用这个方法
int[] a;  //or any other array.
var twoDArray = Make2DArray(a, height, width);

09-16 05:17