9
votes

Quelle est la définition d'un "vrai" réseau multidimensionnel et quelles langues les soutiennent?

La plupart des livres de programmation que j'ai jamais lu ont la ligne suivante:

"x langue ne prend pas en charge de véritables tableaux multidimensionnels, mais vous pouvez simuler (approximatif) les (approximatives) avec des tableaux de tableaux."

Étant donné que la plupart de mes expériences ont été avec des langues C - C ++, Java, JavaScript, PHP, etc., je ne suis pas sûr de ce qu'est un "vrai" réseau multidimensionnel.

Quelle est la définition de la matrice multidimensionnelle de true et quelles langues le supportent? En outre, veuillez afficher un exemple d'un véritable réseau multidimensionnel en code si possible.


2 commentaires

Autant que j'ai entendu Fortran-90 l'avaient utilisé pour l'avoir


@Shekhar_Pro: Chaque version de Fortran que j'ai utilisée (dos à travers 66) a jusqu'à 7 dimensions.


4 Réponses :


0
votes

Java les utilise trop

String[][] Data;

 //Assign the values, do it either dynamically or statically
 //For first fow
 Data[0][0] = "S"; //lastname
 Data[0][1] = "Pradeep"; //firstname
 Data[0][2] = "Kolkata"; //location

 //Second row
 Data[1][0] = "Bhimani"; //lastname
  Data[1][1] = "Shabbir"; //firstname
  Data[1][2] = "Kolkata"; //location

 //Add as many rows you want

 //printing
 System.out.print("Lastname\tFirstname\tLocation\n");
 for(i=0;i<2;i++)
 {
   for(j=0;j<3;j++)
   {
     System.out.print(Data[i][j]+"\t");
   }
   //move to new line
   System.out.print("\n");
 }


0 commentaires

8
votes

C # prend en charge les deux tableaux multidimensionnels vrais et des tableaux "déchiquetés" (réseau de tableaux) qui peuvent être remplacés.

// jagged array
string[][] jagged = new string[12][7];

// multidimensional array
string[,] multi = new string[12,7];


4 commentaires

Merci d'avoir répondu. Je comprends ce qu'est un véritable tableau multidimensionnel. Cependant, gardez à l'esprit que les sous-tableaux C et C ++ ne peuvent pas être de taille différente, même s'ils utilisent des tableaux de tableaux. En outre, c # la seule langue qui les soutient?


"Les sous-tableaux C ++ ne peuvent pas être de taille différente, même s'ils utilisent des tableaux de tableaux.". Non, ils n'utilisent pas de tableaux de tableaux.


@ DOM0 "C ++ Les sous-tableaux ne peuvent pas être de taille différente, même s'ils utilisent des tableaux de tableaux." Pourquoi ce n'est pas vrai? La matrice multidimensionnelle en C ++ est une matrice de tableaux.


"Tableau de tableaux" signifie que le 1er tableau contient un ensemble d'autres tableaux (c'est-à-dire des objets distincts), ce qui n'est pas le cas en C / C ++. int [5] [2] est un seul objet. Quelque chose comme INT * [5] pourrait être considéré comme un tableau de matrices.



0
votes

Sans traverser les rameilles de la littérature sur le Soleil et les sites Microsoft, c'est ce que je me souviens de mes jours C. J'espère que cela t'aides.

Pour le rendre simple, si nous pensons simplement que dans 2 dimensions - les tableaux peuvent être représentés comme une matrice bidimensionnelle et une gamme de pointeurs. En code, cela équivaut à int x [15] [20]; int * y [15];

Dans cet exemple, x [5] [6] et B [5] [6] sont les deux valides syntaxiquement et finissent par se référant à un seul Int.

qui étant dit, X est un véritable réseau bidimensionnel: une fois que vous le créez, il y aura 300 emplacements (pouvant contenir INT) qui ont été réservés, et vous pouvez utiliser la convention de l'indice bien connue pour accéder à cette Array rectangulaire (avec 15 lignes et 20 colonnes) où vous pouvez accéder à X [rangée, col] en calculant (20 * rangée) + col.

Cependant, dans le cas de Y, alors que la structure est en cours de définition, seuls 15 pointeurs sont alloués, mais non initialisés. (L'initialisation devra être faite explicitement)

Il y a des avantages et des inconvénients de cette approche (tableau de pointeur ou "tableau de tableaux" ou tableau déchiqueté tel qu'il est appelé):

Avantage:

Les rangées de ce tableau peuvent être de différentes longueurs, c'est-à-dire. Chaque élément de Y n'a pas besoin de pointer sur une rangée de vingt-éléments; Un élément peut indiquer un élément 2 éléments, le 2e élément peut pointer vers 3 éléments et 3ème à zéro des éléments, etc.

Inconvénient:

Toutefois, étant donné un scénario le meilleur des cas, si chaque élément de Y pointe sur une matrice de vingt-éléments, il y aura 300 emplacements entier réservés, plus dix cellules pour les pointeurs supplémentaires.

à partir d'un point de vue actuel, les exemples tranchants cormés ci-dessus (dans l'un des postes précédents) devraient suffire.


2 commentaires

Dans votre exemple, x [0] ferait simplement pointer sur le premier tableau. De plus, étant donné que les matrices décrivent les pointeurs en C, x est pas un véritable tableau multidimensionnel, même si elle serait contiguë en mémoire et vous pouvez utiliser le pointeur arithmétique pour accéder aux tableaux. C'est pourquoi c a x [] [] Syntaxe mais pas x [].


@JESSEGOOD: x est un véritable tableau multidimensionnel, C ayant une éventuelle-décor de la matrice nonobstant.



0
votes

Common LISP prend en charge les deux types de tableaux.

La matrice multidimensionnelle est appelée tableau, tandis que le "un dimensionnel" est appelé vecteur.


0 commentaires