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] Quel objet tableau pour une recherche indexée ???


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 64
    Points : 48
    Points
    48
    Par défaut [VB.NET] Quel objet tableau pour une recherche indexée ???
    Je récupère à partir d'une table SQLServer un datatable avec une colonne clé/index et une colonne de données normales.

    je voudrais mettre toutes ces données dans un tableau mais pouvoir faire une recherche du type :

    indice = montableau.elements("key/index").getIndice()
    mavaleur = montableau(indice)(2ème colonne)

    voilà, je sais pas trop quel type utiliser .... array, arraylist, hashtable, etc ...

  2. #2
    Membre chevronné
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Points : 1 904
    Points
    1 904
    Par défaut
    Deja: pourquoi de pas rechercher directement dans le datagrid? en parcourant ses rows?

    tout depend de la nature de l'index (string, int..) et j'ai pas bien compris ce qu'etait getIndice (si tu peux expliquer un peu plus)

    tu peux trouver des "guidelines" sur les differentes collections ici:
    http://msdn.microsoft.com/library/en-us/dnpag/html/scalenetchapt05.asp?frame=true#scalenetchapt05_topic29

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par Piotrek
    Deja: pourquoi de pas rechercher directement dans le datagrid? en parcourant ses rows?

    tout depend de la nature de l'index (string, int..) et j'ai pas bien compris ce qu'etait getIndice (si tu peux expliquer un peu plus)
    non je veux (enfin je dois ...) d'abord mettre ça dans un tableau.
    l'index est de type string.

    en gros j'ai un tableau comme tel :
    "index_1", valeur 1
    "index_2", valeur 2
    ...
    "index_n", valeur n

    en passant la valeur de l'index, il faut que ça me renvoie l'indice de la ligne pour pouvoir accéder ensuite aux autres colonnes ( en l'occurrence valeur n )

  4. #4
    Membre chevronné
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Points : 1 904
    Points
    1 904
    Par défaut
    Suivant ce qu'il est dit dans le lien que j'ai rajoute precedemment:

    Do You Need to Search Your Collection?

    If you need to search your collection, do the following:

    * Use Hashtable if you search your collection randomly based on a key/value pair.
    * Use StringDictionary for random searches on string data.
    * Use ListDictionary for sizes less than 10.
    T'as le choix entre Hashtable et ListDictionary. Si il peut y avoir moins de dix elements, je te conseille de travailler avec le ListDictionary a condition de definir sa capacite lors de sa creation (cad le nb de lignes du datatable)
    Ton index sera optimise comme cela

    Hashtable (c'est un peu pompeux)
    http://support.microsoft.com/default.aspx?scid=kb;en-us;309357

    Autrement, il serait aussi possible de faire un array de strings et de faire un Array.BinarySearch(tonArrayStr, 0 , tonArrayStr.GetLength(0) , "indexRecherche") mais pour les perfs, il faudrait faire des tests

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    je pense que je vais avoir quelques centaines d'enregistrements, et au moins 2 champs associés à chaque index.
    le binaysearch semble etre la solution ...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    apparemment le binary search est uniquement pour les tableaux à 1 dimension ...

  7. #7
    Membre chevronné
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Points : 1 904
    Points
    1 904
    Par défaut
    hum je suis pas sur que j'ai compris ce que tu veux faire

    - Avec l'array de strings je pensais renvoyer la position de la ligne (y) dans la datatable, pour pouvoir recuperer par la suite l'info de la [colonne x : ligne y]

    - Autrement tu pourrais faire la recherche directement dans la datatable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        Dim dt As DataTable
        Dim i As Int32
     
        Public Function RechercheValeur(ByVal clefRecherchee As String, ByVal colonneRecherchee As Int32) As Object
     
            Dim colonneClef As Int32 = 0
            For i = 0 To dt.Rows.Count - 1
                If clefRecherchee = DirectCast(dt.Rows(i).Item(colonneClef), String) Then
                    Return dt.Rows(i).Item(colonneRecherchee)
                End If
            Next
     
        End Function
    - Encore autrement: par le binding si c'est qq chose qui a avoir avec une action de l'utilisateur

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    finalement j'ai fais un hashtable avec comme premier élément l'index de la ligne et comme deuxième élément un objet qui englobe toutes les données relatives à chaque ligne

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

Discussions similaires

  1. Uilisiser un Array pour une recherche dans un tableau
    Par AmauryLondon dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/06/2012, 17h52
  2. [VBA-Form]Quel objet rajouter pour dessiner dans une userform?
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/09/2008, 10h37
  3. Quel objet utiliser pour afficher une liste de plusieurs résultats
    Par jlachapelle dans le forum Windows Forms
    Réponses: 1
    Dernier message: 15/08/2008, 20h33
  4. Réponses: 10
    Dernier message: 09/11/2006, 15h28
  5. [C#]Quel objet utiliser pour un tableau..
    Par Jinroh77 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 16/10/2006, 20h22

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