【问题标题】:jagged arrays <-> multidimensional arrays conversion in ASP.NETASP.NET 中的锯齿状数组 <-> 多维数组转换
【发布时间】:2011-03-01 21:55:25
【问题描述】:

我需要一些帮助来创建以下转换:

需要将一个800*600的多维数组转换成锯齿状数组,然后逆向同样的方法(锯齿状数组与原始多维数组的数据相同)

这可能吗?有什么帮助吗?

【问题讨论】:

    标签: .net web-services multidimensional-array jagged-arrays


    【解决方案1】:

    我意识到这个问题有点老了,但为了灵活性起见,我稍微修改了方法来计算方法中的数组大小,而不是必须传入它们:

        static object[][] convertToJaggedArray(object[,] multiArray)
        {
            int firstElement = multiArray.GetLength(0);
            int secondElement = multiArray.GetLength(1);
    
            object[][] jaggedArray = new object[firstElement][];
    
            for (int c = 0; c < firstElement; c++)
            {
                jaggedArray[c] = new object[secondElement];
                for (int r = 0; r < secondElement; r++)
                {
                    jaggedArray[c][r] = multiArray[c, r];
                }
            }
            return jaggedArray;
        }
    

    【讨论】:

      【解决方案2】:

      我已经写了 2 种达到预期结果的方法

              /// <summary>
              /// Converts the contents of a multidimensional array into a Jagged Array
              /// </summary>
              /// <param name="multiArray">the existing multidimensional array you wish to convert</param>
              /// <param name="numOfColumns">number of columns</param>
              /// <param name="numOfRows">number of rows</param>
              /// <returns>Jagged Array representation of multidimensional array passed</returns>
              private int[][] convertToJaggedArray(int [,] multiArray, int numOfColumns, int numOfRows)
              {
                  int[][] jaggedArray = new int[numOfColumns][];
      
                  for (int c = 0; c < numOfColumns; c++)
                  {
                      jaggedArray[c] = new int[numOfRows];
                      for (int r = 0; r < numOfRows; r++)
                      {
                          jaggedArray[c][r] = multiArray[c, r];
                      }
                  }
      
                  return jaggedArray;
              }
      
      
      
          /// <summary>
          /// Converts the contents of a Jagged Array into a multidimensional array
          /// </summary>
          /// <param name="jaggedArray">The Jagged Array you wish to convert into a Multidimensional Array</param>
          /// <param name="numOfColumns">number of columns</param>
          /// <param name="numOfRows">number of rows</param>
          /// <returns>Multidimensional Array representation of Jagged Array passed</returns>
          private int[,] convertTo2DArray(int[][] jaggedArray, int numOfColumns, int numOfRows)
          {
              int[,] temp2DArray = new int[numOfColumns, numOfRows];
      
              for (int c = 0; c < numOfColumns; c++)
              {
                  for (int r = 0; r < numOfRows; r++)
                  {
                      temp2DArray[c, r] = jaggedArray[c][r];
                  }
              }
      
              return temp2DArray;
          } 
      

      然后您只需传递现有的多维或锯齿数组,它就会以不同的数组类型返回相同的内容。例如

      //1. convert to Jagged print out, grid 1 is the existing 2d array instance here
      int[][] jaggedGrid = convertToJaggedArray(grid1, numOfCols, numOfRows);
      
      //2. Take the jagged and re-convert to multi array
      int[,] temp = convertTo2DArray(jaggedGrid, numOfCols, numOfRows);
      

      您还可以使用以下循环检查并打印出任一内容

      // Print out all elements in the jagged array to debugger.
              for (int c = 0; c < jaggedGrid.Length; c++)
              {
                  int[] innerArray = jaggedGrid[c];
                  for (int r = 0; r < innerArray.Length; r++)
                  {
                      System.Diagnostics.Debug.WriteLine("In Jagged Array\nElement No ({0},{1})={2}", c, r, jaggedGrid[c][r] + "\n");
                  }
              }
      
      //print out all values in temp value 2d array to debugger
              for (int c = 0; c < temp.GetLength(0); c++)
              {
                  for (int r = 0; r < temp.GetLength(1); r++)
                  {
                      System.Diagnostics.Debug.WriteLine("In temp array\nElement No ({0},{1})={2}", c, r, temp[c, r] + "\n");
                  }
              }
      

      【讨论】:

        【解决方案3】:

        我做了一些更改,因为 Multiarray 从索引 1 开始,而 Jagged 数组从索引 0 开始。

        static object[][] convertToJaggedArray(object[,] multiArray, int firstElement, int secondElement)
            {
                object[][] jaggedArray = new object[firstElement][];
        
                for (int c = 0; c < firstElement; c++)
                {
                    jaggedArray[c] = new object[secondElement];
                    for (int r = 0; r < secondElement; r++)
                    {
                        jaggedArray[c][r] = multiArray[c+1, r+1];
                    }
                }
                return jaggedArray;
            }
        

        【讨论】:

        • 多数组索引从什么时候开始是基于 1 的?示例here 从 0 开始。
        猜你喜欢
        • 2018-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-28
        • 2015-11-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多