9
votes

Quelles sont les différences entre l'utilisation d'int [] [] et int []?

venant d'un arrière-plan Perl, j'ai toujours défini un tableau 2D en utilisant int [] [] . Je sais que vous pouvez utiliser int [] à la place, quels sont les différences?


1 commentaires

Voici quelques pensées en termes de performance: Stackoverflow.com/Questtions/168897/...


9 Réponses :


9
votes

int [] [] est une matrice de tableaux ou "déchiquetées": vous pouvez l'utiliser lorsque vous souhaitez différentes tailles dans la deuxième dimension. Par exemple, la première sous-maquette peut avoir 5 éléments et la seconde peut avoir 42.

int [] est un tableau à deux dimensions: la deuxième dimension est la même à travers la matrice. Avec INT [7, 42] La deuxième dimension est de 42 pour toutes les 7 lignes.


1 commentaires

A pris les mots de ma bouche.




12
votes

Voici un bon Comparaison

essentiellement int [] [] est un tableau "déchiqueté", il ressemble à ceci: xxx

tandis [] est un tableau multidimenté. qui a toujours la même largeur et la même hauteur: xxx

chacun a ses utilisations en fonction de ce que vous essayez d'accomplir.


1 commentaires

Jagged - chaque "rangée" peut avoir des longueurs de "colonne" différentes. Multidimensionnelle - chaque "rangée" a la même longueur de "colonne".



4
votes

int [] [] est une matrice déchiquetée, où INT [] est un tableau à deux dimensions.

clairement p> xxx pré>

Permet de disposer d'une matrice Ceci: p> xxx pré>

où comme avec int [], vous devez toujours avoir la deuxième partie de la matrice être la même: P>

var a = int[2,2];

a[0,0]
a[0,1]
a[1,0]
a[1,1]


0 commentaires

3
votes

int [] [] est appelé un tableau de tableaux , il peut avoir une longueur arbitraire pour chaque ligne.

INT [] est appelé Array rectangulaire , où toutes les lignes ont la même longueur. Il peut être simulé par le premier.


0 commentaires

0
votes

Une chose à considérer sur une matrice déchiquetée est que vous allociez des morceaux de mémoire non contigus. C'est une bonne chose si vous avez un grand nombre de grands objets. J'ai vu quelque chose [N, N] Créer des problèmes Stackoverflow, mais quelque chose [n] [n] est ok.

Également, si un objet obtient> 85 000 octets, il va à la LOH (gros tas d'objets). Collections .NET et le grand heap objet (LOH) < / p>


0 commentaires

0
votes

ici est un excellent article sur les tableaux, couvrant ce sujet très bien.


0 commentaires

1
votes

Le meilleur moyen de comprendre la différence est de regarder deux façons de créer une matrice NXN:

const int n = 8, m = 8;

int[,] matrix1 = new int[n,m];

int[][] matrix2 = new int[n][];
for (int i = 0; i < matrix2.Length; i++) { matrix2[i] = new int[m]; }

matrix1[1,1] = matrix2[2][2];


0 commentaires

0
votes

vous pouvez voir Int [] [] quant à (int []) [] (int []) est un objet


0 commentaires