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 :

Parcourir un dictionnaire et comparer à une string


Sujet :

VB.NET

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Parcourir un dictionnaire et comparer à une string
    Bonjour,

    J'ai un code écrit en Python que j'aimerai réécrire en VB.Net
    La première chose que je dois faire c'est créer le tableau suivant

    Nom : Capture.PNG
Affichages : 148
Taille : 4,8 Ko

    Je pensais utiliser un dictionnaire pour créer un tableau avec une clé et plusieurs valeurs pour chaque clé, est-ce la meilleure méthode?

    Une fois le dictionnaire créer, j'essaie de le parcourir pour le comparer à cette string, pour vérifier si dans le dictionnaire il existe un item qui correspond au premier caractère de la string.

    Nom : Capture2.PNG
Affichages : 134
Taille : 3,0 Ko

    Voici le code que j'ai pour l'instant

    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
     
    Dim MyItems As New Dictionary(Of Int32, Items)
     
            MyItems.Add(0, New Items With {.Name = "K", .Param1 = 3.5, .Param2 = 9.8, .Param3 = 10.3})
            MyItems.Add(1, New Items With {.Name = "R", .Param1 = 11.5, .Param2 = 12.5, .Param3 = 11.5})
            MyItems.Add(2, New Items With {.Name = "H", .Param1 = 4.89, .Param2 = 6.08, .Param3 = 6.89})
            MyItems.Add(3, New Items With {.Name = "M", .Param1 = 4.89, .Param2 = 6.08, .Param3 = 6.89})
     
       For i = 0 To MyItems.Count - 1
                Label3.Text = MyItems(i).Name
                txt_ipc.Text = MyItems.Count - 1.ToString
                If MyItems(i).Name = seq(0) Then
                    Label3.Text = "Oui"
                    Dim getCarac As String = seq(0).ToString
                    QN1 = -1.0 / (1.0 + Math.Pow(10, MyItems(i).Param2 - pH))
                Else
                    Label3.Text = "Non"
                End If
     
            Next
    La boucle permet de vérifier uniquement si le dernier élément du dictionnaire correspond au premier de la string, je n'arrive pas à vérifier pour chaque éléments du dictionnaire (j'ai également essayé avec un For Each)
    Si quelqu'un a une idée de comment parcourir correctement le dictionnaire pour vérifier chaque valeur ...

    Merci d'avance.

  2. #2
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    Ton code est à revoir ,car il faut sortir de la boucle pour l’élément de chaine trouvé :
    code exemple revu :


    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    Public Class Form2
        Private MyItems As Dictionary(Of Int32, Item)
        Private Seq As String = "MKKMQSIVHAL"
        Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            MyItems = GetDictionary()
     
        End Sub
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim s As String = Seq(0)
            SearchSeq(s)
        End Sub
     
        Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
            Dim s As String = Seq(1)
            SearchSeq(s)
        End Sub
     
        Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
            Dim s As String = Seq(4)
            SearchSeq(s)
        End Sub
        Private Sub SearchSeq(seq As String)
            Label3.Text = "Non"
            LabelName.Text = "neant"
     
            For i = 0 To MyItems.Count - 1
                txt_ipc.Text = MyItems.Count.ToString
                If MyItems(i).Name = seq Then
                    Label3.Text = "Oui"
                    LabelName.Text = MyItems(i).Name
                    Dim getCarac As String = MyItems.Keys(i)
                    Exit For
                End If
     
            Next
     
        End Sub
        Private Function GetDictionary() As Dictionary(Of Int32, Item)
            Dim dictItems As New Dictionary(Of Int32, Item)
     
            dictItems.Add(0, New Item With {.Name = "K", .Param1 = 3.5, .Param2 = 9.8, .Param3 = 10.3})
            dictItems.Add(1, New Item With {.Name = "R", .Param1 = 11.5, .Param2 = 12.5, .Param3 = 11.5})
            dictItems.Add(2, New Item With {.Name = "H", .Param1 = 4.89, .Param2 = 6.08, .Param3 = 6.89})
            dictItems.Add(3, New Item With {.Name = "M", .Param1 = 4.89, .Param2 = 6.08, .Param3 = 6.89})
     
            Return dictItems
     
        End Function
     
        Private Class Item
            Public Property Name As String
            Public Property Param1 As Double
            Public Property Param2 As Double
            Public Property Param3 As Double
        End Class
        Private Class Items
            Inherits List(Of Items)
     
        End Class
     
     
    End Class
    bon code....

  3. #3
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Pourquoi changer la manière de stocker les éléments ?
    Tu pars d'un dictionnaire dont la clé est une chaine et la valeur une liste de nombres
    Tu change pour avoir un dictionnaire dont la clé est un entier et la valeur est un objet contenant 4 propriétés.

    En déclarant la même structure tu pourras y appliquer les mêmes recherches.
    Donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim promopost As New Dictionary(Of String, IEnumerable(Of Double))
    promopost .Add("K", {10.0, 9.8, 10.3})
    promopost .Add("R", {11.5, 12.5, 11.5})
    ...
    promopost .Add("U", {5.2, 5.43, 5.6})
    Puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If promopost.ContainsKey(PremiereLettreDeMaChaine) Then
     // Trouvé
    EndIf

Discussions similaires

  1. Comparer une string et un fichier .txt
    Par OrangeAmps dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 03/05/2014, 00h44
  2. [Vb.net] Comment faire une liste à partir d'une string
    Par NicoNGRI dans le forum ASP.NET
    Réponses: 1
    Dernier message: 25/10/2006, 14h15
  3. Réponses: 23
    Dernier message: 08/06/2006, 15h06
  4. Comment comparer une string et un float ?
    Par chourmo dans le forum Langage
    Réponses: 4
    Dernier message: 15/11/2005, 12h51
  5. Comparaison d'une liste de string à un string
    Par maxazac dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 19/10/2005, 15h39

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