ASP.NET 中的多维数组转换为锯齿数组

4

我希望能够创建以下转换:

需要将一个800 * 600的多维数组转换为不规则数组,然后以相同的数据将不规则数组转换回原始的多维数组。

这是否可能?有没有相关的帮助?

3个回答

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

1

我做了一些更改,因为Multiarray从索引1开始,而Jagged array从索引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为基础?这里的例子是从0开始的。 - drzaus

1

我已经写了两个方法,可以实现所需的结果

        /// <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");
            }
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接