Résolu trier les mots d'une chaîne par leurs nombre d'apparition

  • Auteur de la discussion tunisienne_O
  • Date de début

tunisienne_O

Nouveau membre
bonsoir , je débute sous VB net et j'ai un projet à faire , je dois trier les mots d'une chaîne par ordre croissant par leurs nombre d'apparition dans la chaîne , j'ai pas trouver des solutions clair :\\ aidez moi SVP :)
 

KyrO_82

Grand Maître
Salut :)

Qu'appelles-tu une solution claire? Il n'y en a pas, dans le sens qu'il n'y a pas une fonction déjà toute faite pour faire ça.
Il y a probablement plein de façon de faire ça, a quoi as-tu pensé?

- Itération entre chaque mots (String.Split)
- Compter le nombre d’occurrence de chaque mot avec un Dictionary(mot, nombre)
- Convertir le Dictionary en List de KeyValuePair(mot, nombre)
- Trier la List en fonction de Item.value
 

tunisienne_O

Nouveau membre
merci pour me répondre :)
bon voila si j'ai un tableau { a,b,a,d,c,b,a,a,a} je dois avoir un tableau dans un listBox
a | 5
b | 2
d,c | 1
je sais pas comment faire j'ai essayer les méthodes classiques de tri de tableau et ça marche pas :??:
pour les solutions clairs je veux dire les méthodes prédéfinies en VB :)
 

KyrO_82

Grand Maître
1. Tu as déjà une liste de mot ou un texte?
Pour séparer les mots en tableau à partir d'une chaîne de caractère, utilise la fonction String.Split.
A partir de "a c d d b c d a d b a c"
Tu obtiens [a, c, d, d, b, c, d, a, d, b, a, c]

2. Après tu comptes le nombre d'occurrence de chaque mot, pour obtenir un Dictionary comme ceci:
a: 3
b: 2
c: 3
d: 4

3. Après il faudra trier... je t'aiderai si tu n'arrives pas.
 

tunisienne_O

Nouveau membre
j'ai fais la méthode Split et ça marche ^^ mais pour Dictionary j'ai fais hier une recherche et j'ai pas compris ; si vous pouvez m'aidez je serai très heureuse et reconnaissante monsieur car mon projet est pour demain :'( je vous remercie infiniment :wahoo:
 

KyrO_82

Grand Maître
Meilleure réponse
J'aurais voulu voir ton code, voir que au moins tu essaies d'arriver à quelque chose. Là tu n'as rien. C'est pas comme ça que tu va arriver à en faire ton métier :p

Mais bon, puisque j'aime bien le .NET, je te donne le code :D

Code:
Private Sub CountWords(Text As String)

    ' Obtenir une liste des mots
    Dim WordList = Text.Split(" ")

    ' Compter le nombre d'occurrence de chaque mot
    Dim CountList As New Dictionary(Of String, Integer)
    For Each Item In WordList
        Dim Word = Item.ToLower.Trim ' Tout en minuscule et sans espaces
        If Not CountList.ContainsKey(Word) Then CountList.Add(Word, 0)
        CountList(Word) += 1
    Next

    ' Classer les mots en fonction du nombre d'occurrence
    Dim Result As New SortedDictionary(Of Integer, List(Of String))
    For Each Item In CountList
        If Not Result.ContainsKey(Item.Value) Then Result.Add(Item.Value, New List(Of String))
        Result(Item.Value).Add(Item.Key)
    Next

    ' Afficher le résultat
    For Each item In Result
        Console.WriteLine(String.Join(", ", item.Value) & " : " & item.Key)
    Next

End Sub

Si tu appelles cette procédure avec "c d d b c d a d b a c a d b d a", elle affiche:

Code:
c, b : 3
a : 4
d : 6
 

tunisienne_O

Nouveau membre
tu as raison monsieur mais bien sur que je n'ai pas en attente que quelqu'un fais mon travail méme si je suis pas spécialiste en VB j'ai réussir à faire les autres parties de mon projet :) voila mon code
Code:
 Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Dim x As Integer
        Dim ch As String
        Dim aux As Integer
        Dim i As Integer, j As Integer, nb As Integer
        ch = TextBox3.Text
        nb = 0
        For i = 1 To Len(ch) - 1
            For j = i + 1 To Len(ch)
                If Mid(ch, i, 1) = Mid(ch, j, 1) Then nb = nb + 1
                Dim t As String() = ch.Split("/")
                ListBox1.Items.AddRange(t)

            Next j
        Next i
        Dim v As Integer()
        v(x) = nb
        Dim v As Integer()
        v(x) = nb
        ListBox1.Items.AddRange(v)
        If nb = 0 Then

        Else
            If v(x) < v(x + 1) Then
                aux = v(x + 1)
                v(x + 1) = v(x)
                v(x) = aux
                ListBox1.Items.AddRange(v)
            End If

        End If
    End Sub
mais ça marche pas :p je vous remercie monsieur pour votre aide c'est très gentil de ta part :jakebarnssmiley:
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 135
Messages
6 718 089
Membres
1 586 397
Dernier membre
Chachabidou
Partager cette page
Haut