IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

valeurs de tableaux multidimensionnels


Sujet :

C#

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 957
    Points : 141
    Points
    141
    Par défaut valeurs de tableaux multidimensionnels
    Bonjour,

    Voici la création de deux tableaux multidimensionnels

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
                // Three-dimensional array.
                int[, ,] array3D = new int[,,] { { { 1, 2, 3 }, { 4, 5, 6 } }, 
                                     { { 7, 8, 9 }, { 10, 11, 12 } } };
                // The same array with dimensions specified.
                int[, ,] array3Da = new int[2, 2, 3] { { { 1, 2, 3 }, { 4, 5, 6 } }, 
                                           { { 7, 8, 9 }, { 10, 11, 12 } } };
     
                // Accessing array elements.
     
                MessageBox.Show("la valeur du tableau 3DA est " + array3Da[1, 0, 1]);
                MessageBox.Show("la valeur du tableau 3D est " + array3D[1, 1, 2]);
    Lorsque j'exécute ce code , voici les messages affichés au niveau des boites de dialogue:
    "la valeur du tableau 3DA est 8"
    "la valeur du tableau 3D est 12".

    Pouvez-vous m'aider à retrouver comment s'y est pris le compilateur pour trouver ces valeurs.
    Si avec un tableau à deux dimensions je m'y retrouve, avec un tableau à 3 dimensions, je m'y retrouve moins .

    Merci beaucoup à vous.

    Bien cordialement.

    new_wave
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  2. #2
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    Voilà une décomposition des éléments de ton tableau qui devrait clarifier un peu les choses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    int[, ,] array3D = new int[,,]
    {
        // [0,*,*]
        {
            // [0,0,*]
            {
                // [0,0,0]
                1,
                // [0,0,1]
                2,
                // [0,0,2]
                3
            },
            // [0,1,*]
            {
                // [0,1,0]
                4,
                // [0,1,1]
                5,
                // [0,1,2]
                6
            }
        },
        // [1,*,*] 
        {
            // [1,0,*]
            {
                // [1,0,0]
                7,
                // [1,0,1]
                8,
                // [1,0,2]
                9
            },
            // [1,1,*]
            {
                // [1,1,0]
                10,
                // [1,1,1]
                11,
                // [1,1,2]
                12
            }
        }
    };
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 957
    Points : 141
    Points
    141
    Par défaut tableaux multidimensionnels
    Merci beaucoup à toi.

    Je vais y réfléchir et reviens vers toi aussitôt.

    Cordialement.

    new_wave
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 957
    Points : 141
    Points
    141
    Par défaut tableaux multi dimensionnels
    Bonjour et merci à toi de ta réponse.
    J'ai bien compris comment tu as procédé mais pourquoi faut-il que lorsque tu considères cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     // [0,*,*]
        {
            // [0,0,*]
            {
                // [0,0,0]
                1,
                // [0,0,1]
                2,
                // [0,0,2]
                3
            },
    tu comprends que la valeur maximale de * est 2?
    pourquoi ne pas aller jusqu'à 3?

    Te remerciant de ta réponse,

    Bien cordialement.
    new_wave
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  5. #5
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour
    Pour retrouver tes valeurs dans l'initialiseur il faut lire :

    Les accolades les plus exterieures decrivent l'indice N°1
    Les accolades interieures suivantes decrivent l'indice N°2
    Les accolades interieures suivantes decrivent l'indice N°3
    Etc...
    exemple avec l'orde descriptif des accolades et les dimensions correspondantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     private void button2_Click(object sender, EventArgs e)
            {
                int[, ,] monArray = new int[2, 3, 4] {
                    { // 1ere accolade  decrit Dim 1 
     
                        { 1, 2, 3,4   }, // 1ere accolade decrit Dim 2 
                        { 5, 6, 7,8   }, // 2eme accolade idem...=>Afficher elem 3 soit 6(indice 1)
                        { 9, 10, 11,12}  // 3eme accolade idem
                    } ,
                    { // 2eme accolade  decrit Dim 1
     
                        { 10, 20, 30 ,40  }, // 1ere accolade decrit Dim 2 
                        { 50, 60, 70 ,80  }, // 2eme accolade idem 
                        { 90, 100, 110,120}  // 3eme accolade idem ...=>Afficher elem 3 soit 110(inice 2)
                    } 
                }; 
             // Accessing array elements.
                MessageBox.Show(" valeur de l'element 6   est " + monArray[0, 1, 1]);
                MessageBox.Show(" valeur de l'element 110 est " + monArray[1, 2, 2]);
            }
    bon code...

  6. #6
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 146
    Points : 7 388
    Points
    7 388
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Juste comme ça en passant.

    Si les tableaux multi-dimensionnels sont séduisants (en toute logique, en appliquant juste un offset à chaque indice, on est capable de récupérer chaque élément de manière très véloce en mémoire, il y a quelques années, j'ai été obligé d'admettre que des arrays de arrays sont beaucoup plus rapide que des arrays multi-dimensionnels (ce qui est en soit totalement délirant, j'ai toujours pas réussi à comprendre comment c'était possible).

    Bref, pour des besoins de formation, très bien les tableaux multi-dimensionnels, mais dans la vie de tous les jours, préférer les tableaux de tableaux.

    D'ailleurs, la déclaration inline d'un tel tableau (cf. les codes ci-dessus) passe bien par du array de array.

    En effet, un int[2,2,2] devrait se déclarer { 1, 2, 3, 4, 5, 6, 7, 8 } et non pas {{{1, 2},{3, 4}},{{5, 6}, {7, 8}}} qui est en réalité un int[int[int[]]]

    Donc préférer un :

    int[int[int[]]] qu'un int[,,]

    Accessoirement, les tableaux de tableau, ça permet aussi de gagner de la place mémoire si les tableaux ne font pas tous les mêmes tailles. Attention cependant à pas avoir de décalage dans ce cas (l'origine sera toujours à 0 en C#)
    On ne jouit bien que de ce qu’on partage.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 957
    Points : 141
    Points
    141
    Par défaut
    Bonjour et merci de toutes ces infos.

    J'ai bien compris à présent .
    Je retiens l'utilité de tableaux de tableaux plutôt que celle de tableaux à plusieurs dimensions.
    Je considère la question comme résolue.

    Bien cordialement.

    new_wave
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. AIDE sur Tableaux multidimensionnels
    Par orj30754 dans le forum C
    Réponses: 4
    Dernier message: 07/11/2006, 13h31
  2. Réponses: 4
    Dernier message: 31/08/2006, 17h31
  3. Réponses: 5
    Dernier message: 24/12/2005, 16h40
  4. Réponses: 2
    Dernier message: 08/12/2005, 15h41
  5. [Tableaux] Recherche valeur dans tableaux
    Par Kaimann dans le forum Langage
    Réponses: 10
    Dernier message: 21/10/2005, 12h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo