c# - 是否可以在不制作副本的情况下将 C# double[,,] 数组转换为 double[]

标签 c# .net arrays

我的 .NET 应用程序中有大量数字的 3D 数组。我需要将它们转换为一维数组以将其传递给 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;

最佳答案

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

关于c# - 是否可以在不制作副本的情况下将 C# double[,,] 数组转换为 double[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/96054/

相关文章:

c# - 从 Web 应用程序直接打印到本地打印机

c# - 为什么我不能在数组中创建更多 PictureBox?

C# 将变量转换或解析为 DateTime

c# - LINQ IEnumerable<string> 中的语法

c# - 识别 HTTP 响应来自的 NIC

c - 增加在数组指针数组中实现的数组的最后一行?

arrays - 如何在 O(N) 时间内找到数组中大于或等于当前数字的最右边数字?

javascript - Javascript 程序无法正常运行

c# - LINQ Sum 嵌套集合与 GroupBy 和 OrderByDescending

c# - 反序列化错误