NxNxN矩阵创建

时间:2014-04-30 12:27:41

标签: c# matrix 3d

我为我的项目写了一个小的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值作为构造函数参数。最简单的方法是什么?任何提示/代码片段都会有很大帮助。 感谢。

4 个答案:

答案 0 :(得分:2)

用变量替换常量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;
                }
            }
        }
    }

答案 1 :(得分:0)

您可以在构造函数中定义矩阵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;
                }
            }
        }
    }

答案 2 :(得分:0)

您的代码(以及所有答案)创建一个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];
                }
            }
        }
    }

答案 3 :(得分:0)

更短的方法:

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