[英]C# Splitting a multidimensional array
所以我一直在寻找这个问题的答案大约一个小时,但我找不到答案,所以我要在这里碰碰运气。
问题:我有一个包含容器的 3 维数组。 该数组用于在货船上放置集装箱的算法。 该数组由长度、宽度和高度组成。 我试图在宽度的中间分割数组。
我能够进行排序的唯一解决方案是制作 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];
}
}
}
}
leftSideOfShip 的 3 个 for 循环按预期工作,但第二个循环给出了 indexOutOfRangeException。
有没有更好的方法来分割它,如果是这样,如何分割?
首先,如果船的宽度是奇数,您需要注意如何舍入侧宽。 例如,您总是可以假设,如果船的宽度是奇数,则左侧更宽,例如:
int leftSideWidth = ship.width % 2 == 0 ? ship.width / 2 : (ship.width / 2) + 1;
int rightSideWidth = ship.width / 2;
其次,您在第二个循环块中有错误:因为您正在循环for (int e = ship.width/2; e < ship.width; e++)
e 大于rightSideOfShip
数组的第二维。
完整的解决方案将如下所示:
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];
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.