NxNxN矩阵创建
本文关键字:创建 NxNxN | 更新日期: 2023-09-27 18:00:51
我为我的项目编写了一个小型3D矩阵创建类。事情是这样的。
class _3DMatrix
{
public static int[, ,] m = new int[3, 3, 3];
public _3DMatrix(int a)
{
for (int x = 0; x < 3; x++)
{
for (int y = 0; y < 3; y++)
{
for (int z = 0; z < 3; z++)
{
m[x, y, z] = a;
}
}
}
}
现在看来,我必须创建一个NxNxN矩阵,将N个值作为构造函数参数。最简单的方法是什么?任何提示/代码片段都将大有帮助。谢谢
用变量替换常量3:
请注意,我将数组更改为非静态数组,因为在这里使用静态数组没有意义。
class _3DMatrix
{
public int[, ,] m;
public _3DMatrix(int size, int a)
{
m = new int[size, size, size];
for (int x = 0; x < size; x++)
{
for (int y = 0; y < size; y++)
{
for (int z = 0; z < size; z++)
{
m[x, y, z] = a;
}
}
}
}
您可以在构造函数中定义矩阵m的大小。只要你不改变维度,这将是好的:
编辑:请注意,我为您的矩阵使用了三个单独的大小(n1,n2,n3(,但如果您从不想要不同大小的矩阵,则没有理由不能简单地使用1个大小参数(n(。
class _3DMatrix
{
public static int[, ,] m;
public _3DMatrix(int a, int n1, int n2, int n3)
{
m = new int[n1,n2,n3];
for (int x = 0; x < n1; x++)
{
for (int y = 0; y < n2; y++)
{
for (int z = 0; z < n3; z++)
{
m[x, y, z] = a;
}
}
}
}
您的代码(以及所有答案(创建一个NxN矩阵,所有元素都具有相同的值a
。如果这是你的目标,你就很好。如果没有,您必须在创建函数中传递矩阵元素:
class _3DMatrix
{
public int[, ,] m;
public _3DMatrix(int size, int[,,] a)
{
m = new int[size, size, size];
for (int x = 0; x < size; x++)
{
for (int y = 0; y < size; y++)
{
for (int z = 0; z < size; z++)
{
m[x, y, z] = a[x,y,z];
}
}
}
}
更短的方法:
class _3DMatrix
{
public int[, ,] m;
public _3DMatrix(int N, int a)
{
m = new int[N, N, N];
Buffer.BlockCopy(Enumerable.Repeat(a, m.Length).ToArray(), 0, m, 0, m.Length * Marshal.SizeOf(a));
}
}