我正在用c#编写一个程序,它将12个元素的数组与一个三元组值相关联。我想将数据存储在维度[n,m,p]的矩阵中,但每个元素实际上是一个数组。真实世界的应用程序为3D笛卡尔空间中的每个点节省了12个传感器的输出。
我试过这样的事情:
int[][,,] foo = new int[12][,,];
但是,如果我是对的,那么创建一个包含12个矩阵3x3的数组,而我想要一个12个元素数组的NxMxP矩阵。
如果我尝试像这样指定矩阵尺寸:
int[][,,] foo = new int[12][N,M,P];
我收到错误CS0178(Invalid rank specifier: expected ',' or ']'
)和CS1586(Array creation must have array size or array initializer
)。
我还在学习c#,请原谅我这个琐碎的问题,但我无法理解这个问题。我正在使用2015年的visual studio。
答案 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);