【问题标题】:Getting a 1D array from a 3D array C#从 3D 数组 C# 获取 1D 数组
【发布时间】:2022-01-16 01:27:03
【问题描述】:

我有一个包含一些值的 8x8x3 数组。我想要做的只是列出一维数组。

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

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

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

【问题讨论】:

  • 结果数组中元素组件的顺序是什么?项目 1 的 X、Y、Z,项目 2 的 X、Y、Z 等?
  • @gunr2171 如果 data[0, 0] = { X, Y ,Z },那么我希望 test[] 是 { X, Y, Z }。希望这是有道理的 - toReturn[0] = { X, Y, Z }, toReturn[1] = { X, Y, Z }。
  • 数据有 3 个索引组件,所以data[0, 0] 缺少一个数字。
  • 是的,但我在 data[0, 0] 存储 3 个值我想存储 data[0,0,0]、data[0,0,1] 和 data[0,0 ,2] (所有子值)到另一个数组中。我想手动是唯一的选择。

标签: c# arrays 3d


【解决方案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;
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    相关资源
    最近更新 更多