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 :

Trier une ligne d'un tableau en fonction d'une autre ligne


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Par défaut Trier une ligne d'un tableau en fonction d'une autre ligne
    Bonjour.
    Je n'arrive pas à faire quelque chose, c'est pourquoi j'ai besoin d'aide.

    Dans un tableau à deux lignes, sur la première j'ai des scores et sur la seconde la personne qui a fait ce score.
    Comment trier uniquement la première ligne par ordre décroissant et faire en sorte que la seconde suivent logiquement la première.

    Exemple :
    850 925 528 744
    Paul Pierre Nicolas Jacques

    Comment faire pour que le tableau devienne ainsi :
    925 850 744 528
    Pierre Paul Jacques Nicolas

    Merci de votre aide.
    Cordialement.

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Personnellement, je trouve la question quelque peu vague. Je dirais qu'il manque les éléments suivants:

    1) L'origine de ton tableau (fichier texte, feuille Excel, base de données etc.)

    2) L'ampleur du tableau (10, 20, 1000 lignes ?)

    3) Le sort à réserver à des doublons éventuels

    4) Le mode d'affichage des résultats. (Texte, tableaux graphiques etc.)

    Il existe plusieurs, ou du moins quelques, classes du Framework qui ont des méthodes de tri intégrés que tu pourrais sans doute utiliser. Mais, pour les mettre en œuvre, tu dois être en mesure de traiter ta source de données convenablement.

    Avec le peu de détails que tu fournis, tu semble vouloir établir un classement quelconque. Ma préférence personnelle va à l'utilisation d'une table (DataTable) à deux colonnes (Nom et Résultat). Ensuite, tu peux filtrer et trier la table avec un DataView ou une BindingSource. Ce sera plus simple et plus rapide que de programmer une routine de tri à partir de zéro.

    Ceci dit, les Règles du forum prévoient explicitement que les répondeurs ne font pas les travaux ou les exercices des demandeurs. Il est d'usage aussi que les demandeurs montrent un extrait suffisamment long de la partie de leur code qui cause problème. Dans la mesure où le code n'est pas très long, on peut aussi envisager le code au complet.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Par défaut
    Bonsoir, et merci pour votre réponse.

    Il s'agit d'un tableau VB.NET de type String de deux lignes et d'une colonne initié ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Tableau(0, 1) As String
    À chaque partie terminée, je sauvegarde le score et le détenteur de celui-ci dans un fichier texte, après quoi je remplis mon tableau de ces données après l'avoir redimensionné. Voici le code complet :
    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
    Imports System.IO
    Public Class Form2
        Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim Tableau(0, 1) As String
            Dim i = 0
            Dim ecrire_fichier As StreamWriter = File.AppendText("Sauvegarde.txt") ' j'ouvre le fichier en mode écriture
            ecrire_fichier.WriteLine(Form1.c) ' la variable c de la Form1 contient le score
            ecrire_fichier.WriteLine(Form1.Nom.Text) ' le TextBox de la Form1 contient le nom du joueur
            ecrire_fichier.Close()
     
            Dim lire_fichier As StreamReader = File.OpenText("Sauvegarde.txt")  ' j'ouvre le fichier en mode lecture
     
            Do While Not lire_fichier.EndOfStream
                ReDim Preserve Tableau(i, 1)
                Tableau(i, 0) += lire_fichier.ReadLine
                Tableau(i, 1) += lire_fichier.ReadLine
                i += 1
            Loop
     
            ' et maintenant j'aimerais trier uniquement la première ligne par ordre décroissant et faire en sorte que la seconde suivent "logiquement" la première comme décris dans le premier message.
     
        End Sub
    End Class
    S'il y a des doublons, il ne faut pas les supprimer.
    Merci du temps que vous me consacrez, car là je sèche complètement.

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Par défaut
    Que faut-il que j'apporte d'autre ?

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,

    A mon sens, le choix d'un tableau n'est pas approprié (ainsi que le fichier texte mais c'est un autre débat). Tu peux utiliser une List(of...) qui propose une méthode OrderBy.
    Pour se faire, tu crées une classe Score avec comme propriété le Nom et le Score. Tu crées une instance Scores = new List(Of Score) que tu remplis. Ensuite un simple Scores.OrderBy(s => s.Score).ToList(); te retourne la liste triée par score.

  6. #6
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Hello,

    +1 pour ebastien

    Je pense que tu as pris le problèmes à l'envers...
    Tu as dû vouloir avoir l'affichage Score(s) + Nom sur deux lignes, tu en a déduis d'utiliser un tableau à deux lignes, 10 000 colonnes...
    Et qu'en plus tu devrais travailler le trie sur cet objet... Voir la gestion des joueurs...

    Ca ne va pas.

    Il faut penser Objet ! Un truc du genre :

    Créer une classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public class Gamer
     
         Public Nom as String
         Public ListDesScores as List (Of Integer)
     
    End Class

    Quand tu créer un joueur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim NouveauJoueur as New Gamer()
    NouveauJoueur.Nom = "Toto"
    Pour ajouter un score :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NouveauJoueur.ListDesScores.Add(948)


    Dans ton programmes, tu auras donc une liste de gamer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private ListeGamer as List (Of Gamer)
    Liste que tu vas sauvegarder dans un fichier xml (serialization, très rapide et facile)

    Après pour l'affichage, tu utilises un DatagridView si tu veux (format tableau), ou autre chose...
    Un DGV 1 colonnes, x lignes, tu boucles sur tes gamers :

    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
    For Each joueur As Gamer in ListOfGamer
     
       'ajout d'une ligne avec joueur.Nom
        Dim MaNouvelleLigne1 as monDGV.NewRow()
        MaNouvelleLigne1.Item(0) = joueur.Nom
        monDGV.Rows.Add(MaNouvelleLigne1 )
     
       ' trier les scores:
        joueur.ListDesScores.Sort()
     
        'ajout d'une ligne avec tous les scores triés
        Dim ScoreFormat as string
        For each score As Integer in joueur.ListDesScores
                ScoreFormat = ScoreFormat  & " " & Score 
        Next
     
        Dim MaNouvelleLigne2 as monDGV.NewRow()
        MaNouvelleLigne2.Item(0) = ScoreFormat.Trim
        monDGV.Rows.Add(MaNouvelleLigne2)
     
    Next
    Et ça se sera rapide, facile à lire et à modifier... plutôt que de trier des scores, toutes les deux lignes, colonnes par colonnes...
    Il faut distinguer les données qui te servent à travailler, de l'affichage.

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/03/2015, 14h04
  2. Réponses: 1
    Dernier message: 11/10/2013, 13h56
  3. [XL-2007] copier une une ligne d'un tableau en fonction de la valeur de la première cellule
    Par mentat dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/12/2009, 11h49
  4. Réponses: 1
    Dernier message: 28/03/2007, 11h28
  5. Envoie des info du ligne d'un tableau a travers d'une checkbox
    Par BriceTheNice dans le forum Struts 1
    Réponses: 2
    Dernier message: 27/06/2006, 15h55

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