从3D数组C#中获取1D数组



我有一个8x8x3数组,其中包含一些值。我想做的是列出1D阵列。

到目前为止我得到的:

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

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

您不需要做任何特定的事情就可以将3D阵列转换为1D阵列;你可以列举一下:

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;
}

请注意,如果区块大小没有划分为元素的数量,我不会试图使ticks数组变小。idx将有一个残差值,您可以使用它来计算最后一个数组的大小,如果这是重要的

最新更新