C# C分割多维数组

C# C分割多维数组,c#,arrays,multidimensional-array,C#,Arrays,Multidimensional Array,所以我已经寻找了一个小时的答案,但我找不到答案,所以我要在这里试试运气 问题是: 我有一个包含容器的三维数组。此数组用于在货船上放置集装箱的算法。数组由长度、宽度和高度组成。我正在尝试在宽度的中间拆分阵列 我能做的唯一解决方案是制作2、3维数组,然后使用6个for循环复制大数组: Container[,,] leftSideOfShip = new Container[ship.length, ((ship.width) / 2), ship.height]; C

所以我已经寻找了一个小时的答案,但我找不到答案,所以我要在这里试试运气

问题是: 我有一个包含容器的三维数组。此数组用于在货船上放置集装箱的算法。数组由长度、宽度和高度组成。我正在尝试在宽度的中间拆分阵列

我能做的唯一解决方案是制作2、3维数组,然后使用6个for循环复制大数组:

        Container[,,] leftSideOfShip = new Container[ship.length, ((ship.width) / 2), ship.height];
        Container[,,] rightSideOfShip = new Container[ship.length, ((ship.width) / 2), ship.height];
        for(int a = 0; a < ship.length; a++)
        {
            for(int b = 0; b < ship.width/2; b++)
            {
                for(int c = 0; c < ship.height; c++)
                {
                    if(ship.position[a,b,c] != null)
                    {
                        leftSideOfShip[a, b, c] = ship.position[a, b, c];
                    }
                }
            }
        }
        for (int d = 0; d < ship.length; d++)
        {
            for (int e = ship.width/2; e < ship.width; e++)
            {
                for (int f = 0; f < ship.height; f++)
                {
                    if(ship.position[d,e,f] != null)
                    {
                        rightSideOfShip[d, e, f] = ship.position[d, e, f];
                    }
                }
            }
        }
船舶左侧的3个for循环按预期工作,但第二个循环给出了IndexOutofFrangeException


有没有更好的分割方法?如果有,如何分割?

首先,你需要注意如何将船的侧宽变圆,以防船的宽度是奇数。例如,如果船的宽度为奇数,您可以始终假设左侧更宽,如下所示:

int leftSideWidth = ship.width % 2 == 0 ? ship.width / 2 : (ship.width / 2) + 1;
int rightSideWidth = ship.width / 2;
其次,第二个循环块中有一个错误: 因为您正在循环int e=ship.width/2;e<船宽;e++e大于船舶右侧数组的第二个维度

完整解决方案将如下所示:

Container[,,] leftSideOfShip = new Container[ship.length, leftSideWidth, ship.height];
Container[,,] rightSideOfShip = new Container[ship.length, rightSideWidth, ship.height];

for (int i = 0; i < ship.length; i++)
{
    for (int j = 0; j < ship.width; j++)
    {
        for (int k = 0; k < ship.height; k++)
        {
            if (j < leftSideWidth)
            {
                leftSideOfShip[i, j, k] = ship.position[i, j, k];
            }
            else
            {
                rightSideOfShip[i, j - leftSideWidth, k] = ship.position[i, j, k];
            }
        }
    }
}