Calculer occurence d'un mot dans une colonne de ListView [Résolu]

Drarig29 82 Messages postés jeudi 26 décembre 2013Date d'inscription 14 juin 2016 Dernière intervention - 12 déc. 2014 à 21:38 - Dernière réponse : cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention
- 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
Afficher la suite 

4 réponses

Répondre au sujet
NHenry 14129 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 19 avril 2018 Dernière intervention - 12 déc. 2014 à 21:50
0
Utile
Regardes du côté de Dictionary(of ...,...)
Dans ton cas Dictionary(Of String, Integer)

Puis, regardes les méthodes TryGet et Add.
Commenter la réponse de NHenry
0
Utile
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
Commenter la réponse de cgsi3
0
Utile
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
Commenter la réponse de cgsi3
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 13 déc. 2014 à 21:01
0
Utile
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
Commenter la réponse de cs_ShayW

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.