【问题标题】:Single-dimensional arrays as equivalents of multi-dimensional arrays?一维数组等同于多维数组?
【发布时间】:2011-04-22 08:29:56
【问题描述】:

我有一个数组定义如下:

Tile[,] Tiles

它在 X 轴上包含 100 个元素,在 Y 轴上包含 150 个元素。虽然这在我的游戏中因地图而异,但我始终知道 X 轴和 Y 轴上的图块数量。

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

【问题讨论】:

  • 我怀疑您的应用程序性能会因使用二维数组而降低:) 使用一维数组只会使您的代码更难阅读和维护...
  • 我想知道“一维数组比多维数组快2倍”的来源。以及您暗示多维数组不能用于并行计算的来源。很高兴知道您如何使用数组来针对特定场景进行优化。

标签: c# arrays


【解决方案1】:

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

【讨论】:

    【解决方案2】:
        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;
            }
    

    【讨论】:

      【解决方案3】:

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

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

      3 是二维数组的 ySize。

      int OneDArrayIndex = (3*xPosition)+ yPosition ;
      

      这将给出一维数组的索引,您可以将值插入到一维数组的该索引处。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-13
        • 1970-01-01
        • 2019-02-20
        • 2013-06-09
        • 1970-01-01
        • 1970-01-01
        • 2016-03-25
        相关资源
        最近更新 更多