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 :

Fonction tri nombres


Sujet :

VB.NET

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 428
    Par défaut Fonction tri nombres
    Bonjour, pour trier une liste d'une combobox ou il y a par exemple: a1 a12 b2 b13 c2 c15

    le problème c'est que ca trie bien sur les lettres mais pas sur les chiffres? ca trie ainsi: a12 a1 b13 b2 c15 c2

    j'utilise cette fonction:
    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
    Function tri()
            Dim SLigne1 As String
            Dim SLigne2 As String
            Dim IndiceBoucle As Integer
            Dim TemoinPermutation As Boolean = True  ' Vaut False quand il n'y a plus de permutation
            Dim Temporaire As String
     
            While TemoinPermutation
                TemoinPermutation = False
                For IndiceBoucle = 0 To ComboBox1.Items.Count - 2
                    SLigne1 = ComboBox1.Items(IndiceBoucle)
                    SLigne2 = ComboBox1.Items(IndiceBoucle + 1)
                    If SLigne1 > SLigne2 Then
                        TemoinPermutation = True
                        Temporaire = ComboBox1.Items(IndiceBoucle)
                        ComboBox1.Items(IndiceBoucle) = ComboBox1.Items(IndiceBoucle + 1)
                        ComboBox1.Items(IndiceBoucle + 1) = Temporaire
                    End If
                Next
            End While
        End Function

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 428
    Par défaut
    j'ai trouvé une facon de le faire, un peu long mais sa marche, il y a peut etre plus court?
    le tri ce fait en premier sur les chiffres et en deuxième sur les lettres: voilà
    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
    46
    47
    48
    49
    Function trichiffre()
            Dim SLigne1 As String
            Dim SLigne2 As String
            Dim chiffre1 As Integer
            Dim chiffre2 As Integer
            Dim IndiceBoucle As Integer
            Dim TemoinPermutation As Boolean = True  ' Vaut False quand il n'y a plus de permutation
            Dim Temporaire As String
            While TemoinPermutation
                TemoinPermutation = False
                For IndiceBoucle = 0 To ComboBox1.Items.Count - 2
                    SLigne1 = ComboBox1.Items(IndiceBoucle)
                    SLigne2 = ComboBox1.Items(IndiceBoucle + 1)
                    chiffre1 = SLigne1.Substring(1)
                    chiffre2 = SLigne2.Substring(1)
                    If chiffre1 > chiffre2 Then
                        TemoinPermutation = True
                        Temporaire = ComboBox1.Items(IndiceBoucle)
                        ComboBox1.Items(IndiceBoucle) = ComboBox1.Items(IndiceBoucle + 1)
                        ComboBox1.Items(IndiceBoucle + 1) = Temporaire
                    End If
                Next
            End While
        End Function
        Function trilettre()
            Dim SLigne1 As String
            Dim SLigne2 As String
            Dim chiffre1 As String
            Dim chiffre2 As String
            Dim IndiceBoucle As Integer
            Dim TemoinPermutation As Boolean = True  ' Vaut False quand il n'y a plus de permutation
            Dim Temporaire As String
            While TemoinPermutation
                TemoinPermutation = False
                For IndiceBoucle = 0 To ComboBox1.Items.Count - 2
                    SLigne1 = ComboBox1.Items(IndiceBoucle)
                    SLigne2 = ComboBox1.Items(IndiceBoucle + 1)
                    chiffre1 = SLigne1.Substring(0, 1)
                    chiffre2 = SLigne2.Substring(0, 1)
                    If chiffre1 > chiffre2 Then
                        TemoinPermutation = True
                        Temporaire = ComboBox1.Items(IndiceBoucle)
                        ComboBox1.Items(IndiceBoucle) = ComboBox1.Items(IndiceBoucle + 1)
                        ComboBox1.Items(IndiceBoucle + 1) = Temporaire
                    End If
     
                Next
            End While
        End Function

  3. #3
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Si ça marche comme on veut, ce devrait être bien suffisant. Mais si on pense à faire d'une façon plus générale, on peut regarder l'interface System.Collections.IComparer : une implémentation de sa fonction Compare() déterminerait qui devant qui en général pour un tri.

    https://support.microsoft.com/en-hk/...in-visual-basi

    Un exemple d'implémentation qui est au fond pertinent pour le problème-ci, on peut consulter ceci :

    https://www.dotnetperls.com/alphanumeric-sorting-vbnet

    C'est aussi l'approche assez générale de le faire dans bien des langages de programmation différents.

  4. #4
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 197
    Billets dans le blog
    1
    Par défaut
    Ce que tu cherches à faire, c'est un "tri naturel" (ou natural sort).

    Le principe, c'est de découper la chaîne en :
    - Blocs numériques
    - Blocs non numériques

    Puis effectuer un tri de tout ce joyeux bordel.

    Tu trouveras ici un exemple de code (j'ai pas vérifié s'il était correct) :
    https://www.codeproject.com/Articles...-Sort-Comparer

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

Discussions similaires

  1. [Débutant] Fonction Tri Liste de nombre
    Par renovatio34 dans le forum C#
    Réponses: 2
    Dernier message: 08/05/2012, 03h28
  2. aide fonction tri heapsort (création du tas)
    Par Invité dans le forum C
    Réponses: 6
    Dernier message: 24/11/2009, 00h27
  3. Fonction de tri nombres entiers aléatoires
    Par mabengos dans le forum Assembleur
    Réponses: 2
    Dernier message: 12/10/2008, 09h54
  4. help fonction tri bubble sort
    Par Invité dans le forum C
    Réponses: 10
    Dernier message: 22/12/2005, 20h54
  5. Réponses: 4
    Dernier message: 31/10/2005, 17h48

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