当前位置:  开发笔记 > 编程语言 > 正文

是否可以将C#double [,,]数组转换为double []而无需复制

如何解决《是否可以将C#double[,,]数组转换为double[]而无需复制》经验,为你挑选了2个好方法。

我的.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数组一样?



1> Loren Segal..:

我不相信C#将数据存储在内存中的方式可以像C中的简单转换一样使其可行.为什么不使用1d数组开始,也许为类型创建一个类,以便您可以在程序中访问它,就像它是一个3d数组一样?



2> Yes - that J..:

不幸的是,C#数组并不能保证在连续的内存中,就像它们是像C这样更接近金属的语言.所以,没有.如果没有逐个元素的副本,就无法将double [,,]转换为double [].

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有