我有一个如下定义的数组:
Tile[,] Tiles
X轴包含100个元素,Y轴包含150个元素。这在我的游戏中不同于地图到地图,但我总是知道X和Y轴上的图块数量。
鉴于此,我如何将上面的数组转换为一维数组,并迭代它们?我知道单维数组比多维数组快2倍,这对我的游戏性能意义重大。此外,单维数组可以与并行计算一起使用。
答案 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;
}