Calculer occurence d'un mot dans une colonne de ListView

Résolu
Utilisateur anonyme - Modifié par Drarig29 le 12/12/2014 à 21:40
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 13 déc. 2014 à 21:01
Bonjour, j'ai une ListView avec des mots dans une colonne, et j'aimerais afficher le nombre de fois qu'apparaît le mot à côté de celui-ci.

Voici un screenshot de ce que j'aimerais avoir comme résultat (j'ai mis les chiffres manuellement, bien sûr)



Mais je ne sais pas du tout comment faire... J'ai pensé à faire une boucle pour chaque item dans la ListView, regarder le mot et y associer une valeur qui augmente à chaque fois qu'il retrouve le mot. Mais je ne sais pas comment translater en VB.NET ce que j'ai écrit en français...

Je pense à un code de ce genre là, en langage courant :

For Each item As ListViewItem In ListView1.Items
Regarder texte dans deuxième colonne
Associer Integer égal à 1 à ce mot
If texte dans deuxième colonne = mot qui possède déjà valeur égale à 1 Then
Valeur déjà associée à ce mot += 1
End If
Next
A voir également:

4 réponses

NHenry Messages postés 15111 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 avril 2024 159
12 déc. 2014 à 21:50
Regardes du côté de Dictionary(of ...,...)
Dans ton cas Dictionary(Of String, Integer)

Puis, regardes les méthodes TryGet et Add.
0
Bonjour Drarig29,

Ta question m'intéresse pour un sujet assez proche.
Sujet: J'essai a partir d' un string() d'obtenir un rapport qui énumère les valeurs distinctes du tableau et leur nombres de répétitions


Voici la solution par Linq (Accessoirement elle les tri )
    Public Function Doublons_Count(ByVal Xi As String()) As Dictionary(Of String, Integer)
        Dim q3 = Xi.GroupBy(Function(x) x).Select(Function(g) New With {Key .Value = g.Key, Key .Count = g.Count()}).OrderByDescending(Function(x) x.Count)
        Dim retour As New Dictionary(Of String, Integer)
        For Each M In q3
            retour.Add(M.Value, M.Count)
            Console.WriteLine(M.ToString)
        Next
        Return retour
    End Function


Je ne sais pas si c'est la plus rapide mais elle fonctionne et si tu veux l'optimiser tu peux aussi t'exonérer de la création du dictionnaire et utiliser directement la variable q3

( j'ai mis la ligne: Console.WriteLine(M.ToString) pour que tu puisse visualiser le résultat rapidement, tu peux la supprimer)

Bonne journée CGSI3
0
Re,

Apres 2 bonnes heures de travail, j'ai voulu tester la rapidité du code pour de grand tableaux, et je dois dire que la solution que j'ai proposé est certes facile a mettre en place mais pas du tout rapide.

Sur 1000 string de 2 caractères, j'arrive a 1682 ms avec la méthode Linq soit une éternité en langage informatique

je suis donc revenu a mes simples boucles

    ''' <summary>
    ''' Supprime les doublons d'un String() et donne un rapport
    ''' </summary>
    ''' <param name="Xi">String()</param>
    Public Shared Function Doublons_Count(ByVal Xi() As String) As Dictionary(Of String, Integer)
        Dim Retour As New Dictionary(Of String, Integer)
        Dim xi3 As ArrayList = New ArrayList(Xi)
        xi3.Sort()
        Dim cpt As Integer = 0
        Do While cpt < xi3.Count
            Dim P As String = xi3(cpt), nb As Integer = 1
            cpt = cpt + 1
            Do While cpt < xi3.Count
                If P = xi3(cpt) Then
                    nb = nb + 1 : cpt = cpt + 1
                Else
                    Exit Do
                End If
            Loop
            Retour.Add(P, nb)
        Loop
        Return Retour
    End Function


et la j'obtiens 8 ms, ce qui est beaucoup plus acceptable.
Reste a vérifier que cette dernière fonction travail correctement dans tous les cas.

Bonne journée CGSI3
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
13 déc. 2014 à 21:01
Bonjour

je n'ai pas calculer le temps d'execution

Private Function FindOccurence() As Dictionary(Of String, Integer)
Dim str1 As String
Dim vect() As String
str1 = "Je découvre le vb.net après avoir passé quelques années à écrire du"
str1 &= "code en vba, c'est donc tout naturellement que j'ai recherché un tuto sur developpez.net. Et je suis tombé sur le tien. Je n'ai pas encore tout lu en détail, mais j'ai parcouru l'ensemble du document. Wow ! quel travail de titan ! Ca semble très complet, j'ai bien l'impression qu'il est parti pour être mon nouveau livre de chevet !"
str1 &= "Merci beaucoup pour tout ce travail et de le partager ainsi ! Il mériterait d'être édité en vrai livre !"
str1 &= "code en vba, c'est donc tout naturellement que j'ai recherché un tuto sur developpez.net. Et je suis tombé sur le tien. Je n'ai pas encore tout lu en détail, mais j'ai parcouru l'ensemble du document. Wow ! quel travail de titan ! Ca semble très complet, j'ai bien l'impression qu'il est parti pour être mon nouveau livre de chevet !"
str1 &= "code en vba, c'est donc tout naturellement que j'ai recherché un tuto sur developpez.net. Et je suis tombé sur le tien. Je n'ai pas encore tout lu en détail, mais j'ai parcouru l'ensemble du document. Wow ! quel travail de titan ! Ca semble très complet, j'ai bien l'impression qu'il est parti pour être mon nouveau livre de chevet !"
str1 &= "Je découvre le vb.net après avoir passé quelques années à écrire du"
str1 &= "code en vba, c'est donc tout naturellement que j'ai recherché un tuto sur developpez.net. Et je suis tombé sur le tien. Je n'ai pas encore tout lu en détail, mais j'ai parcouru l'ensemble du document. Wow ! quel travail de titan ! Ca semble très complet, j'ai bien l'impression qu'il est parti pour être mon nouveau livre de chevet !"
str1 &= "Merci beaucoup pour tout ce travail et de le partager ainsi ! Il mériterait d'être édité en vrai livre !"
str1 &= "code en vba, c'est donc tout naturellement que j'ai recherché un tuto sur developpez.net. Et je suis tombé sur le tien. Je n'ai pas encore tout lu en détail, mais j'ai parcouru l'ensemble du document. Wow ! quel travail de titan ! Ca semble très complet, j'ai bien l'impression qu'il est parti pour être mon nouveau livre de chevet !"
str1 &= "code en vba, c'est donc tout naturellement que j'ai recherché un tuto sur developpez.net. Et je suis tombé sur le tien. Je n'ai pas encore tout lu en détail, mais j'ai parcouru l'ensemble du document. Wow ! quel travail de titan ! Ca semble très complet, j'ai bien l'impression qu'il est parti pour être mon nouveau livre de chevet !"
str1 &= "Je découvre le vb.net après avoir passé quelques années à écrire du"
str1 &= "code en vba, c'est donc tout naturellement que j'ai recherché un tuto sur developpez.net. Et je suis tombé sur le tien. Je n'ai pas encore tout lu en détail, mais j'ai parcouru l'ensemble du document. Wow ! quel travail de titan ! Ca semble très complet, j'ai bien l'impression qu'il est parti pour être mon nouveau livre de chevet !"
str1 &= "Merci beaucoup pour tout ce travail et de le partager ainsi ! Il mériterait d'être édité en vrai livre !"
str1 &= "code en vba, c'est donc tout naturellement que j'ai recherché un tuto sur developpez.net. Et je suis tombé sur le tien. Je n'ai pas encore tout lu en détail, mais j'ai parcouru l'ensemble du document. Wow ! quel travail de titan ! Ca semble très complet, j'ai bien l'impression qu'il est parti pour être mon nouveau livre de chevet !"
str1 &= "code en vba, c'est donc tout naturellement que j'ai recherché un tuto sur developpez.net. Et je suis tombé sur le tien. Je n'ai pas encore tout lu en détail, mais j'ai parcouru l'ensemble du document. Wow ! quel travail de titan ! Ca semble très complet, j'ai bien l'impression qu'il est parti pour être mon nouveau livre de chevet !"
For i = 0 To 3
str1 &= str1

Next
vect = str1.Split(New Char() {}, StringSplitOptions.RemoveEmptyEntries)
Dim list1 As New List(Of String)
Dim dic1 As New Dictionary(Of String, Integer)
list1 = vect.ToList
list1.Sort()
Dim count As Integer
Dim word As String = String.Empty
For Each item In list1
If item <> word Then
If word <> String.Empty Then
dic1.Add(word, count)
End If
word = item
count = 0
End If
count += 1
Next

Return dic1
End Function
0
Rejoignez-nous