-
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 ?
-
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];
-
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;
Réponses
Trop de publicités?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.
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][];
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]);
}
}
- Réponses précédentes
- Plus de réponses