繁体   English   中英

从 3D 数组 C# 获取一维数组

[英]Getting a 1D array from a 3D array C#

我有一个带有一些值的 8x8x3 数组。 我想做的只是列出一维 arrays。

到目前为止我得到了什么:

int[] packIt(int[,,] data, int factor) {
            List<int[]> toReturn = new List<int[]>();
            int[] test = data[0, 0];

因此,除非我遗漏了什么,否则我会列出一维 arrays 并尝试在 data[0, 0] 处放入一维数组(到目前为止,测试只是一个占位符)。 我得到的错误是“错误的索引数量”,但是如果我按照 data[0,0,0] (没有错误),我只会在该位置获得 1 值。 我可以手动完成,但我只是想知道是否有我正在尝试做的功能的实现,因为我会经常使用它。 谢谢一堆。

您无需执行任何特定操作即可将 3D 阵列转换为一维阵列; 你可以枚举它:

foreach(var x in multiDim)
  ...

这将打印 1 到 8:

            var x = new int[2,2,2];
    x[0,0,0] = 1;
    x[0,0,1] = 2;
    x[0,1,0] = 3;
    x[0,1,1] = 4;
    x[1,0,0] = 5;
    x[1,0,1] = 6;
    x[1,1,0] = 7;
    x[1,1,1] = 8;
    
    foreach(int i in x)
      Console.WriteLine(i);

为此,您可以直接枚举数组中的任何内容:

var out = new List<int[]>();
var arr = new int[chunkSize];
out.Add(arr);
var idx = 0;
foreach(var x in miltiDimArray){
  if(idx == chunkSize){
    out.Add(arr = new int[chunkSize]);
    idx = 0;
  }
  arr[idx++] = i;
}

请注意,如果块大小不分为元素数,我不会尝试使刻度数组更小。 idx 将有一个残差值,如果这很重要,您可以使用它来计算调整最后一个数组的大小

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM