преобразование многомерных массивов в ASP.NET - PullRequest
4 голосов
/ 10 июня 2010

Мне нужна помощь для создания следующих преобразований:

Необходимость преобразования многомерного массива 800 * 600 в зубчатый массив и затем тот же метод в обратном порядке (зубчатый массив с теми же данными в исходный многомерный массив)

Возможно ли это? и какая-нибудь помощь по этому поводу?

Ответы [ 3 ]

4 голосов
/ 14 ноября 2013

Я понимаю, что вопрос немного устарел, но ради гибкости я немного изменил метод для вычисления размеров массива в методе, вместо того, чтобы передавать их в:

1 голос
/ 10 июля 2012

Я сделал несколько изменений, так как 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 голос
/ 22 января 2012

Я написал 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");
            }
        }
...