将阵列从2d展平为1d

时间:2014-11-08 17:03:50

标签: c#

我们说我们有两个数组:

double[,] a = new double[width,height];
double[] b = new double[width*height];

我们填写一些数字,让我们说0和1。

为什么:

for(int i = 0; i < a.GetLength(0); i++)
    for(int j = 0; j < a.GetLength(1); j++)
        b[i * a.GetLength(0) + j] = a[i,j];

在b []?

的所有字段中仅返回0

3 个答案:

答案 0 :(得分:2)

顺便说一下。将二维数组转换为一维数组的更有效方法是:

public static T[] ToPlainArray<T>(this T[,] array)
{
    Type type = typeof(T);
    int sizeInBytes = Marshal.SizeOf(type);
    T[] buffer = new T[array.Length];
    Buffer.BlockCopy(array, 0, buffer, 0, array.Length * sizeInBytes);
    return buffer;
}

用法:

double[] b = a.ToPlainArray();

或者

double[] b = ToPlainArray(a);

答案 1 :(得分:0)

您需要乘以第二维的长度,而不是第一维的长度:

b[i * a.GetLength(1) + j] = a[i,j];

除此之外,效率较低但更难以实现这一目标:

b = a.Cast<double>.ToArray();

答案 2 :(得分:0)

添加以下行:

Debug.WriteLine("b[" + (i* a.GetLenth(1) + j) + "] = " + b[i * a.GetLength(1) + j]);

并检查会发生什么