126 votes

Pourquoi avons-nous à la fois des tableaux en dents de scie et des tableaux multidimensionnels ?

  1. Quelle est la différence entre un tableau en dents de scie et un tableau multidimensionnel ? Y a-t-il un avantage de l'un par rapport à l'autre ?

  2. Et pourquoi Visual Studio ne me permet-il pas de faire un

    MyClass[][] abc = new MyClass[10][20];

    (Nous avions l'habitude de faire cela en C++, mais en C#, il souligne [20] d'une ligne rouge ondulée. Dit que le spécificateur de rang n'est pas valide)

    mais se contente de

    MyClass[,] abc = new MyClass[10,20];
  3. Enfin, comment puis-je initialiser ceci en une seule ligne (comme nous le faisons dans un simple tableau avec {new xxx...}{new xxx....} )

    MyClass[][,][,] itemscollection;

0voto

A.R.S.D. Points 160

Je pense que l'allocation de mémoire des tableaux 2d en dents de scie en C# est comme les tableaux 2d en C++ et C. En effet, les 2d jagged arrays ont un pointeur qui pointe vers un tableau de pointeurs dont chacun pointe vers un tableau d'éléments (par exemple des éléments entiers) ; comme ce code en C++,

int** 2DArr {new int* [number1]};
for (int i = 0; i < number1; i++)
{
   2DArr[i] = new int[number2];
}

L'allocation de mémoire du code ci-dessous est la même que celle des 2d jagged arrays en C#. Je ne suis pas sûr que ce soit le cas, mais vous pouvez m'expliquer si j'ai mal compris.

0voto

IForti Points 537

Ce billet est déjà ancien, mais voici ce que j'en pense.

Les tableaux en dents de scie sont des tableaux multidimensionnels. Il existe deux types de tableaux multidimensionnels : les tableaux rectangulaires et les tableaux en dents de scie. Les tableaux rectangulaires représentent un bloc de mémoire à n dimensions, et les tableaux en dents de scie sont des tableaux de tableaux.

Tableaux rectangulaires

Les tableaux rectangulaires sont déclarés en utilisant des virgules pour séparer chaque dimension. L'instruction suivante déclare un tableau rectangulaire à deux dimensions, dont les dimensions sont 3 × 3 :

int[,] matrix = new int [3, 3]; 

Tableaux en dents de scie

Les tableaux en dents de scie sont déclarés en utilisant des crochets successifs pour représenter chaque dimension. Voici un exemple de déclaration d'un tableau bidimensionnel en dents de scie, dont la dimension extérieure est 3 :

int[][] matrix = new int[3][];

0voto

maxspan Points 310
 public class ArrayExamples    
{
            //Multi-Dimensional Array are of 2 types
            //1. Jagged Array: Array of Arrays
            //2. rectangular Array: Array having more than one dimension
            public void JaggedArray()
            {
                //Declaring an array with 3 element. Each element containing single dimension array.
                //Benefit: Each single dimension array defined can be of different length.
                int[][] jaggedArray = new int[3][];

                jaggedArray[0] = new int[] { 1, 2, 3, 4, 5 };//single dimension array lengh:5
                jaggedArray[1] = new int[] { 6,7,8};//single dimension array lengh:3
                jaggedArray[2] = new int[] { 9, 10 };//single dimension array lengh:2

                foreach (var array in jaggedArray)
                    foreach (var element in array)
                    {
                        Console.WriteLine(element);
                    }
            }

            public void RectangularArray()
            { 
                //Declaring a 2 dimensional array with  5 rows and 2 columns.
                //Benefits: When we want to declare an array with multiple dimension
                //and we know the length as length should be predefined.
                //

                int[,] array2Dimensional = new int[5,2] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 }, { 9, 10 } };

                //This loop will go through all the elements
                //This will display all the elements i.e. 1,2,3,4,5,6,7,8,9,10
                foreach (var element in array2Dimensional)
                {
                   //Console.WriteLine(element);
                }

                //Accessing specific element in the 2 dimensional array.
                //i.e. will display 1 which is the first element of first row and first column.
                Console.WriteLine(array2Dimensional[0, 0]);
            }
        }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X