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

VB.NET Discussion :

Tableaux ou ARRAY en VB.NET


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Employé administratif
    Inscrit en
    Janvier 2005
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Employé administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2005
    Messages : 37
    Points : 21
    Points
    21
    Par défaut Tableaux ou ARRAY en VB.NET
    Bonjour

    J'ai une petite expérience en VBA et maintenant je cherche a me convertir en VB.net et je rame un peu...

    Je cherche a déclarer un tableau ou un array mais je n'y arrive pas.
    Plus précisement, je veux déclarer une suite d'array remplis de 0 ou de 1 (pour faire une sorte de labyrinthe) :
    niveau(0) = Array(1, 1, 1, 1, 1, 1, 1)
    niveau(1) = Array(1, 1, 1, 1, 1, 0, 0)
    niveau(2) = Array(1, 0, 0, 0, 0, 0, 1)
    ...
    J'ai déclaré ma variable niveau(6) en variant
    L'idée c'est d'avoir un repere orthonormé pour récupérer la valeur (0 ou 1) en fonction de Y (l'indice de niveau) et X (le Xieme rang dans l'array)
    Ca fonctionne en VBA (et aussi en VB6) mais pas en .net et malgré les tuto et les cours, je ne comprend pas pourquoi.
    Si j'utilise un tableau (6,6 par exemple) je vais devoir galérer pour le remplir avec des boucles imbriqués.

    Y a t'il une solution ?

    Merci de votre aide.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 156
    Points : 25 075
    Points
    25 075
    Par défaut
    en vb.net l'utilisation de tableaux n'est pas spécialement recommandée
    mieux vaut utiliser des collections de classes
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre à l'essai
    Homme Profil pro
    Employé administratif
    Inscrit en
    Janvier 2005
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Employé administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2005
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    Ok mais avec des collections de classes, peut on "indexer" en X et en Y ?

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 156
    Points : 25 075
    Points
    25 075
    Par défaut
    tu peux indexer en ce que tu veux, même en system.drawing.point si tu veux (un point ayant un x et un y)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Bonjour,

    ce que vous cherchez à faire est bien sur faisable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       Dim niveau As Integer(,) = {{1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 0, 0}, {1, 0, 0, 0, 0, 0, 1}}
     
            For i As Integer = 0 To niveau.GetLength(0) - 1
                For y As Integer = 0 To niveau.GetLength(1) - 1
                    Debug.Write(niveau(i, y) & " ")
                Next
                Debug.WriteLine("")
            Next
    Une partie du cour du Dr P. Lasserre sur les tableaux : http://plasserre.developpez.com/ve1-3.htm
    (Ce cours est à lire, il est vraiment très intéressant)

    Citation Envoyé par Pol63 Voir le message
    en vb.net l'utilisation de tableaux n'est pas spécialement recommandée
    mieux vaut utiliser des collections de classes
    Je n'ai jamais entendu parlé de ça,vous auriez des sources la dessus?
    Car pendant mes études, un professeur me disait que les tableaux étaient très performant car ils faisaient un accès direct à la mémoire (La variable contenant l'adresse initiale et l'index incrémentant cet adresse de l'index fois la taille du type du tableau) du coup j'utilise les tableaux pour tous les type de base dans mes programmes avant de passer aux collections
    Je suis donc fortement intéressé par vos propos

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 156
    Points : 25 075
    Points
    25 075
    Par défaut
    Citation Envoyé par Sankasssss Voir le message
    Je n'ai jamais entendu parlé de ça,vous auriez des sources la dessus?
    Car pendant mes études, un professeur me disait que les tableaux étaient très performant car ils faisaient un accès direct à la mémoire (La variable contenant l'adresse initiale et l'index incrémentant cet adresse de l'index fois la taille du type du tableau) du coup j'utilise les tableaux pour tous les type de base dans mes programmes avant de passer aux collections
    Je suis donc fortement intéressé par vos propos
    la source c'est moi sur des tests, d'autres développeurs répondants ici et sur c#
    on doit pouvoir trouver des informations plus officielles sur le net, mais bon un test avec quelques lignes de code peut suffire

    déjà les tableaux, ce n'est pas de la POO, l'utilisation de classe amène une légèreté au code, qui devient plus lisible et maintenable
    les collections s'appuie sur des tableaux pré dimensionnés donc si les tableaux sont performants les collections aussi
    le problème avec les tableaux c'est surtout en cas de mauvaise utilisation, par exemple un redim preserve dans une boucle et vous obtenez un code 1000 ou 10000 fois moins performant qu'une collection avec un .Add
    car en cas de redimensionnement d'un tableau, un nouveau tableau de la nouvelle taille est créé en mémoire, et l'ancien tableau est copié intégralement dans le nouveau, donc une perte de temps extraordinaire ...

    il y a le même problème avec les string, concaténer créé un nouveau string à chaque fois, donc dans une boucle c'est très lent et il y a la classe system.text.stringbuilder qui permet de concaténer (ou autre) sans perte de performance

    les collections se basant sur des tableaux, lors d'un .add qui fait que ca va dépasser la taille du tableau on a la même perte de temps, mais le tableau est redimensionné à taille x2 donc c'est moins souvent, et on peut pré dimensionner comme on veut

    l'autre utilisation à éviter c'est un tableau par variable genre un nom(10) as string prenom(10) as string pour stocker des personnes
    avec une classe contenant 2 propriétés (nom et prénom) et une collection de personne, il n'y a qu'un accès au tableau indexé puis l'accès au propriétés


    il existe plusieurs types de collections qui ont toutes des fonctionnalités plus riches que les tableaux
    le list(of T) est une collection indexée par ordre d'ajout (0 à n-1 éléments), accès direct comme sur un tableau
    le dictionary(of T, T2) est un peu comme un list of mais l'indexation se fait sur une instance du 1er type, l'accès se fait par hashage qui permet un accès rapide
    par exemple pour lier un textbox à un bouton on peut utiliser un dictionary(of button, textbox), ledico(unbouton) retourne le textbox lié, c'est très pratique
    il y a aussi les queue et stack pour le fifo et filo
    et plein d'autres à découvrir sans system.collections.* (et d'autres dans system.linq)
    il y a aussi des collections à "énumérateur différé", sur lesquelles on peut appliquer des filtres, des tris et autres et c'est appliqué seulement lors de la lecture de la collection
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Je vous lit depuis assez longtemps pour vous croire

    Je connaissais les performances élevées des List(of T) qui sont 5 fois plus rapide que les ArrayList de type quelconque (vive les générique) mais je pensais que le tableau restait plus performant.

    J'utiliserai désormais les collections même pour les types de base.

    Merci pour ces explications plus que complète

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 156
    Points : 25 075
    Points
    25 075
    Par défaut
    Citation Envoyé par Sankasssss Voir le message
    Je vous lit depuis assez longtemps pour vous croire
    il y a quand même un léger pourcentage de ce que j'ai dis jusque là qui s'est avéré faux ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Effectivement mieux vaut utiliser des collections qui sont au final que des tableaux avec une surcouche bien étudiée par les ingénieurs de Microsoft pour la gestion objet... (et y en a un paquet de ces collections pour tout les goûts et les couleur, pas que le traditionnel List (Of))

    Bien entendu je dis pas que dans des cas particuliers il n'est pas intéressant d'utiliser des tableaux pour réaliser sa propre implémentation d'une collection (j'ai jamais dit que c'était pas possible d'être plus astucieux que les ingénieurs de Micro$oft hein :-) ).

    Mais je crois que le jour ou vous en arrivez la, faudra vous demandez si faut pas changer de langages et faire du C ou de l'assembleur...

  10. #10
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    il y a quand même un léger pourcentage de ce que j'ai dis jusque là qui s'est avéré faux ^^
    Ca ne reste qu'un léger pourcentage

  11. #11
    Membre à l'essai
    Homme Profil pro
    Employé administratif
    Inscrit en
    Janvier 2005
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Employé administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2005
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    Merci pour toutes vos réponses, je vais creuser tous ça et me plonger dans le cours de Mr Lasserre.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Employé administratif
    Inscrit en
    Janvier 2005
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Employé administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2005
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    Ok j'ai trouvé mon bonheur (une solution proche de celle proposé par Sankasssss )
    Je vais quand même étudier les collections car ça a l'air assez puissant...
    Merci beaucoup

  13. #13
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 156
    Points : 25 075
    Points
    25 075
    Par défaut
    c'est surtout pratique
    tu peux faire .Add .Remove .Contains(un element) etc...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. [Tableaux] Pseudos, array et boucle
    Par Woodgate dans le forum Langage
    Réponses: 3
    Dernier message: 12/09/2006, 14h33
  2. [Tableaux] PHP, Array et réaffichage
    Par kagura dans le forum Langage
    Réponses: 11
    Dernier message: 29/08/2006, 14h07
  3. Réponses: 11
    Dernier message: 17/07/2006, 22h08
  4. [Tableaux] Affichage Array
    Par dafalri dans le forum Langage
    Réponses: 6
    Dernier message: 06/12/2005, 11h55
  5. création de tableaux avec Array() et élément 'fantome'
    Par Talieth dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/11/2005, 09h49

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