簡體   English   中英

C# 拆分多維數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM