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

本文关键字:等价物 一维数组 数组 | 更新日期: 2023-09-27 17:51:22

我有一个数组定义如下:

Tile[,] Tiles

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

考虑到这一点,我如何将上面的数组转换为单维数组,并遍历它们?我知道单维数组比多维数组快2倍,这对我的游戏性能来说意义重大。此外,单维数组可以用于并行计算。

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

如果Y轴上的项目数在每个X轴上都是固定的,你可以试试这个。
假设a = 在X轴上计数, b = 在Y轴上计数;
你可以定义Tiles = new Tile[a*b];
那么Tiles[x,y]就变成了Tiles[x*b+y]

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

首先你必须知道这里的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 ;

这将给出一维数组的索引,你可以在这个索引上插入你的值。

希望对您有所帮助.....