4

次の変換を作成するための助けが必要です。

800*600 の多次元配列をジャグ配列に変換し、同じ方法を逆に行う必要がある (元の多次元配列と同じデータのジャグ配列)

これは可能ですか?それについて何か助けはありますか?

4

3 に答える 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;
    }
于 2013-11-13T23:56:37.507 に答える
1

マルチ配列はインデックス1から始まり、ジャグ配列はインデックス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;
    }
于 2012-07-09T20:58:21.910 に答える
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");
            }
        }
于 2012-01-22T15:07:54.617 に答える