C#矩阵阵列

时间:2017-03-13 14:38:30

标签: c# arrays matrix jagged-arrays

我正在用c#编写一个程序,它将12个元素的数组与一个三元组值相关联。我想将数据存储在维度[n,m,p]的矩阵中,但每个元素实际上是一个数组。真实世界的应用程序为3D笛卡尔空间中的每个点节省了12个传感器的输出。

我试过这样的事情:

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

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

如果我尝试像这样指定矩阵尺寸:

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

我收到错误CS0178Invalid rank specifier: expected ',' or ']')和CS1586Array creation must have array size or array initializer)。

我还在学习c#,请原谅我这个琐碎的问题,但我无法理解这个问题。我正在使用2015年的visual studio。

4 个答案:

答案 0 :(得分:5)

尝试使用4维数组。

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

答案 1 :(得分:5)

如果您要创建{em}数组组织的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] 数组矩阵(请参阅评论):

  

我试图获取12个元素数组的NMP实例,可以通过   n,m,p指数

  // 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];

答案 2 :(得分:1)

int[][,,] foo

您正在创建一个三维数组(int)数组。如果要初始化该数组,则必须执行此操作:

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

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

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

你可以使用一些LINQ来使它成为单行(见Dmitry的回答),但它基本上是相同的。

C#中的多维数组很难处理。

答案 3 :(得分:0)

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

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