我们说我们有两个数组:
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答案 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]);
并检查会发生什么