2010-06-09 29 views
4

我想一些帮助创建以下convertions:交错数组<->多维数组转换在ASP.NET

一个需要一个800 * 600多维数组转换成锯齿状数组,然后以相反的相同的方法(锯齿阵列与原始多维阵列相同的数据)

这可能吗?和任何帮助吗?

回答

1

我已经写了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"); 
      } 
     } 
1

我做了一些变化,从多阵列索引1开始,而交错数组从index开始内容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; 
    } 
+2

从什么时候多阵列索引1为基础?示例[这里](http://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx)从0开始。 – drzaus 2014-05-22 15:48:16

4

我意识到问题有点旧,但为了灵活性,我修改了一下方法来计算方法内的数组大小,而不是必须通过它们:

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