C# 数组矩阵

C# Matrix of arrays

我正在用 c# 编写一个程序,该程序将 12 个元素的数组与值的三元组相关联。我想将我的数据存储在维度 [n,m,p] 的矩阵中,但每个元素实际上是一个数组。现实世界的应用程序正在为 3D 笛卡尔坐标 space.

中的每个点保存 12 个传感器的输出

我试过这样的事情:

int[][,,] foo = new int[12][,,];

但是,如果我是对的,这会创建一个包含 12 个矩阵的 3x3 数组,而我想要一个包含 12 个元素数组的 NxMxP 矩阵。

如果我尝试像这样指定矩阵维度:

int[][,,] foo = new int[12][N,M,P];

我收到错误 CS0178 (Invalid rank specifier: expected ',' or ']') and CS1586 (Array creation must have array size or array initializer)。

我还在学习 C#,请原谅我提出这个琐碎的问题,但我无法解决这个问题。我正在使用 visual studio 2015.

尝试使用 4 维数组。

int[,,,] foo = new int[N,M,P, 12];

如果您想创建12 实例 [N, M, P] 矩阵组织为数组(请,请注意 int[][,,] 是矩阵数组,而不是数组矩阵):

 int[][,,] foo = Enumerable
   .Range(0, 12)
   .Select(_ =>  new int[N, M, P])
   .ToArray();

或者

 int[][,,] foo = Enumerable
   .Repeat(new int[N, M, P], 12)
   .ToArray();

如果你喜欢循环

 // please, notice the different declaration: 
 int[][,,] foo = new int[12];

 for (int i = 0; i < foo.Length; ++i)
   foo[i] = new int[N, M, P]; 

编辑:如果你想要[N, M, P] 数组矩阵(见评论):

I'm trying to get NMP instances of 12-elements arrays, addressable by the n,m,p indices

  // please, notice the different declaration: matrix of arrays
  int[,,][] foo = new int[N, M, P][];

  for (int i = 0; i < foo.GetLength(0); ++i)
    for (int j = 0; j < foo.GetLength(1); ++j)
      for (int k = 0; k < foo.GetLength(2); ++k)
        foo[i, j, k] = new int[12];
int[][,,] foo

您正在创建一个 3 维数组(整数)数组。如果你想初始化那个数组,那么你必须这样做:

int[][,,] foo = new int[12][,,];

然后遍历 foo 并为每个单元格初始化 3-D 数组:

foo[i] = new int[M,N,P];

您可以使用一些 LINQ 使其成为单行代码(请参阅 Dmitry 的回答),但基本上是一样的。

C# 中的多维数组使用起来有点麻烦。

我不知道它是否对您有帮助(也许您只需要数组),但您可以尝试创建简单的 Point3D class。这将提高可读性,我认为,维护。

public class Point3D
{
    int X { get; set; }
    int Y { get; set; }
    int Z { get; set; }

    public Point3D(int x, int y, int z)
    {
        this.X = x;
        this.Y = y;
        this.Z = z;
    }
}

然后:

Point3D[] arrayOfPoints = new Point3D[12];
arrayOfPoints[0] = new Point3D(0, 2, 4);