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

Windows Forms Discussion :

[vb.net] redimensionement d'un tableau multidimensionel


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut [vb.net] redimensionement d'un tableau multidimensionel
    Bonjour

    L'instruction ci-dessous me genere une erreur qui explique que Redim ne peut redimensioner que la dimension la plus a droite!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                            ReDim Preserve tableTMexSNMR(tableTMexSNMR.GetLength(0) + 3, 4)
    Y-a-t-il une solution pour redimensioner une autre dimension?? Ou dois-je permuter mes lignes et colonnes pour ensuite utiliser Redim? Merci!

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Attention
    Citation Envoyé par MSDN
    ReDim ne peut pas changer le rang (nombre de dimensions) du tableau.
    Si vous utilisez Preserve, vous pouvez redimensionner seulement la dernière dimension du tableau
    Donc montre moi le code que tu fais en me l'expliquant, je t'aiderai à trouver une autre solution

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Salut neguib et merci...

    En fait, je sais pas vraiment te montrer beaucoup plus de code.

    Dans les declarations de mon Form, je declare mon tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim tablePLGexPLAmeanPLA(5, 4) As String
    Ce tableau se remplit ligne par ligne en cours de programme. Chaque fois, que je remplis une ligne du tableau, je regarde si c'etait pas la derniere. Si c'etait la derniere, je rajoute 3 lignes au tableau. La variable nbrPLGexPLAmeanPLA contient le nombre de ligne deja remplies :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                        If tablePLGexPLAmeanPLA.GetLength(0) = nbrPLGexPLAmeanPLA Then
                            ReDim Preserve tablePLGexPLAmeanPLA(tablePLGexPLAmeanPLA.GetLength(0) + 3, 4) 'Redim fonctionne pas!
                        End If
    Voila... Tu as une idee :

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    ok j'ai vu
    donc si je ne me trompe pas, la seconde dimension du tableau est fixe et ne bouge jamais, c'est çà :
    car dans ce cas , ta solution d'inverser ton tableau est bonne, çà te demandera simplemnt de jongler un peu pour restructurer son remplissage
    remarque parrallele: j'espère que tu n'a pas trop de redim preserve qui se produisent dans ton appli car cela ralentit de façon significative l'execution sans oublier une perte de ressources conséquente.
    Si cela t'ennuie pour ton appli, tu gagnerai peut être à manipuler des arraylist (equivalent d'un tableau à 1 dimension, mais sans problème de type ni de redimensionnement - c'est automatique), le tout serait de créer un arraylist par colonnes (instancier à une capacity minimale afin que les add se fasse partout au même indice)
    Lorsque cela est nécessaire (besoin d'affichage) rien n'empêche de creer directement un tableau multidimensionnelle en fonction de la taille des arraylist et qui les reunit tous

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Salut neguib,

    donc si je ne me trompe pas, la seconde dimension du tableau est fixe et ne bouge jamais, c'est çà ?
    C'est bien cela!

    Je pense pas avoir trop de Redim dans mon form... Toutefois, que veux-tu dire par :
    ...une perte de ressources conséquente.
    car, j'utilise en fait les Redim pour eviter de consommer trop de memoire vive. Ce qui aurait ete le cas si j'avais choisi une taille arbitraire tres grande pour mon tableau, en etant quasi sur que je n'en attendrais jamais les limites...

    Bon je me lance dans l'inversion de mon tableau et je garde a l'esprit les arraylist pour une autre fois...

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut
    Citation Envoyé par Manix
    Je pense pas avoir trop de Redim dans mon form... Toutefois, que veux-tu dire par :
    ...une perte de ressources conséquente.
    car, j'utilise en fait les Redim pour eviter de consommer trop de memoire vive. Ce qui aurait ete le cas si j'avais choisi une taille arbitraire tres grande pour mon tableau, en etant quasi sur que je n'en attendrais jamais les limites...
    Chaque Redim crée un nouveau tableau de la nouvelle taille et recopie les données. L'ancien ne sera détruit que par le garbage collector, on ne sait pas trop quand.

    Donc si tu fais 50 Redim, tu te retrouves avec 50 tableaux en mémoire. C'est pas si méchant vu que le GC libèrera ce qu'il faut si ça devient nécessaire, mais ça reste bancal quand on utilise un framework qui a des collections.

    Tableau de dimension variable -> collection. Idéalement, Redim Preserve devrait disparaitre. Redim aussi d'ailleurs, vu que ça revient à faire un New. Ce sont juste deux restes obsolètes de VB6.

  7. #7
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    merci a tous.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 13/03/2006, 12h28
  2. Réponses: 4
    Dernier message: 08/02/2006, 15h19
  3. [VB.NET] redimensionement d'un formulaire
    Par smedini dans le forum Windows Forms
    Réponses: 5
    Dernier message: 01/02/2006, 16h37
  4. [VB.NET] Dimension d'un tableau
    Par fabthebreton dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/07/2004, 09h37
  5. [VB.NET] Création d'un tableau en code behind
    Par netr dans le forum ASP.NET
    Réponses: 6
    Dernier message: 11/05/2004, 10h02

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