我的.NET应用程序中有大量的3D数组.我需要将它们转换为1D数组以将其传递给COM库.有没有办法转换数组而不复制所有数据?
我可以像这样进行转换,但后来我使用了两倍的内存量,这是我的应用程序中的一个问题:
double[] result = new double[input.GetLength(0) * input.GetLength(1) * input.GetLength(2)]; for (i = 0; i < input.GetLength(0); i++) for (j = 0; j < input.GetLength(1); j++) for (k = 0; k < input.GetLength(2); k++) result[i * input.GetLength(1) * input.GetLength(2) + j * input.GetLength(2) + k)] = input[i,j,l]; return result;
Loren Segal.. 8
我不相信C#将数据存储在内存中的方式可以像C中的简单转换一样使其可行.为什么不使用1d数组开始,也许为类型创建一个类,以便您可以在程序中访问它,就像它是一个3d数组一样?
我不相信C#将数据存储在内存中的方式可以像C中的简单转换一样使其可行.为什么不使用1d数组开始,也许为类型创建一个类,以便您可以在程序中访问它,就像它是一个3d数组一样?
不幸的是,C#数组并不能保证在连续的内存中,就像它们是像C这样更接近金属的语言.所以,没有.如果没有逐个元素的副本,就无法将double [,,]转换为double [].