一维数组作为多维数组的等价物?

时间:2011-04-22 08:29:56

标签: c# arrays

我有一个如下定义的数组:

Tile[,] Tiles

X轴包含100个元素,Y轴包含150个元素。这在我的游戏中不同于地图到地图,但我总是知道X和Y轴上的图块数量。

鉴于此,我如何将上面的数组转换为一维数组,并迭代它们?我知道单维数组比多维数组快2倍,这对我的游戏性能意义重大。此外,单维数组可以与并行计算一起使用。

3 个答案:

答案 0 :(得分:2)

好吧,如果每个X的Y轴上的项目数是固定的,你可以试试这个 假设a轴上的= 计数,而y轴上的b = 计数;
你可以定义Tiles = new Tile[a*b];
然后Tiles[x,y]变为Tiles[x*b+y]

答案 1 :(得分:1)

首先你必须知道2d数组的大小,假设: - (2x3)

//xPosition and yPosition are the index of 2D array (1,2)
int xPosition = 1;
int yPosition = 2;

3是2d数组的ySize。

int OneDArrayIndex = (3*xPosition)+ yPosition ;

这将为1D数组提供索引,您可以在OneD数组中将此值插入此索引。

希望这会有所帮助.....

答案 2 :(得分:1)

    private static int[] TwoDArrayToOneDArray( int[][] TwoDArray, int xSize, int ySize)
        {
            int xIndex = 0;
            int OneDArrayIndex = 0;
            int[] oneDArray = new int[xSize * ySize];
            for (int yIndex = 0; yIndex < ySize && xIndex < xSize; yIndex++)
            {

                OneDArrayIndex = (ySize * xIndex) + yIndex;
                oneDArray[OneDArrayIndex] = TwoDArray[xIndex][yIndex];
                if (yIndex == ySize - 1)
                {
                    yIndex = 0;
                    xIndex = xIndex++;
                }
            }
            return oneDArray;
        }