Algorithme pour convertir un tableau multidimensionnel à un tableau à une dimension
Il est assez facile de convertir un tableau en 2 dimensions d'un seul tableau multidimensionnel, mais comment puis-je convertir un tableau multidimensionnel de plus de 2 dimensions d'un tableau à une dimension? Par exemple, supposons que j'ai int [5][5][5] x et int [125] y et je veux mettre la valeur à x[3][4][2] à sa juste place dans y?
L'espoir qui fait sens.
OriginalL'auteur user436390 | 2010-08-31
Vous devez vous connecter pour publier un commentaire.
Quelques techniquement bonnes réponses ici déjà, mais voici une façon plus visuelle de la compréhension...
OK, donc vous savez comment passer de la dimension 1 cas pour les 2 dimensions de cas.
1-D tableau ressemble à ceci:
Et un tableau 2d ressemble à ceci:
Vous pourrait image la conversion correspondant à l'1-D tableau comme ceci:
Mais une autre façon de penser à ce sujet est à l'image du tableau d'origine, mais ré-étiquetés comme ceci:
...et si vous pensez de cette façon, les 3 dimensions de cas suit le même principe (et donc pour des dimensions supérieures, - il devient de plus en plus difficile à visualiser!):
Merci! belle façon de l'illustrer!
Plus de détails pour int[dimX][dimY][dimZ] : 1-D index de tableau [i * dimY*dimZ + j * dimZ + k]
Cet exemple m'a inspiré pour comprendre la relation entre l'équation polynomiale et de la matrice(Vecteur).
OriginalL'auteur Matthew Slattery
et utile C truc:
OriginalL'auteur Anycorn
Il y a en fait une façon vraiment cool de penser à ce sujet que personne n'a posté ici encore.
dans le cas le plus simple, vous pouvez l'imaginer X, Y, Z coordonnées que des chiffres dans un nombre imaginaire système que vous avez créé. Ces nombres sont écrits XYZ, de sorte que votre exemple [3][4][2] devrait être écrite comme: 342
Ceux d'entre nous l'habitude de penser en Octal et Hexadécimal sont habitués à ce que cela ne veut pas dire trois cents, quatre des dizaines et 2, mais au lieu
trois 64s, quatre 8, et deux 1s
ou
trois 256s, quatre 16s et 2
C'est vraiment ce que votre nombre imaginaire système doit faire, mais chaque chiffre est à la base de la durée de l'autre côté du tableau, la prochaine fois inférieur à la base (à moins qu'il n'en est pas, dans ce cas, 1. La dernière longueur du tableau n'est pas utilisé dans ce calcul, mais au lieu de cela, seulement à la limite de votre boucle. Ordre dans ce calcul est basé sur la façon dont vous voulez traduire longueur côté en linéaire des éléments.
Pour un 5x5x5 tableau, c'est facile:
D'autres bases peuvent être plus complexes, en particulier avec les non-uniforme tailles, mais c'est juste une autre façon de penser le problème.
Voici un non-uniforme 565 exemple:
OriginalL'auteur SplinterReality
Vous pouvez avoir différentes façons de carte multi-dimensions des tableaux dans des tableaux linéaires. Le truc, c'est que vous avez à choisir une convention. Allons-y avec la convention suivante. Le premier indice indique un bloc conteneur, le second spécifie un bloc dans l'une des précédentes conteneurs et, enfin, le troisième indicateur est le décalage à l'intérieur d'un bloc. Vous pouvez généraliser facilement pour les multi-dimensions, mais permet de garder à 3 pour cet exemple:
OriginalL'auteur AraK
Vous pouvez effectuer les opérations suivantes en C#.
Ou de transformation en une n-dimensions tableau.
Et de test.
OriginalL'auteur Rob Blackbourn