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

Linq Discussion :

Regrouper par paires


Sujet :

Linq

  1. #1
    Invité
    Invité(e)
    Par défaut Regrouper par paires
    Bonjour a tous.

    J'ai un dictionary<string, string> contenant successivement un nom et une date.
    Example:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    myMap["key0"] = "Jean";
    myMap["key1"] = "10/05/2013"
    myMap["key2"] = "Marc"
    myMap["key3"] = "08/11/2012"
    Est il possible avec linq de creer une liste de Personne (class contenant un nom et une date) a partir ce de dictionary et sachant que je ne connais pas les valeurs des keys.

    Merci pour toute aide.
    Dernière modification par Invité ; 10/05/2013 à 14h46. Motif: Extraire des paires d'un dictionary et les regrouper

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2013
    Messages : 21
    Points : 37
    Points
    37
    Par défaut
    Salut,

    Dans ton cas précis je ne suis pas sur que linq soit la solution. Une boucle "classique" me parait plus simple à mettre en place et à lire / maintenir ensuite.

  3. #3
    Invité
    Invité(e)
    Par défaut
    C'est ce que je pensais mais je me disais que ça ne respectai pas vraiment "l'esprit" du langage. Je vais rester avec ma boucle du coup.

    Merci

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Euh, je sais pas si tu es au courant, mais un Dictionary<TKey, TValue> ne donne absolument aucune garantie sur l'ordre des éléments. Tel que c'est implémenté, il se trouve que les éléments restent généralement dans l'ordre où tu les as ajoutés, mais ça peut changer (par exemple s'il y a besoin d'augmenter la capacité, si tu supprimes des items et que tu en ajoutes d'autres, etc). Donc rien ne garantit que le nom et la date vont rester "côte à côte" dans le dictionnaire ! Cette structure de donnée n'est pas du tout adaptée pour stocker ce genre de données...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Euh, je sais pas si tu es au courant, mais un Dictionary<TKey, TValue> ne donne absolument aucune garantie sur l'ordre des éléments. [...]
    Je ne sais pas si ça pourra aider mais il peut utiliser la classe SortedDictionnary qui elle permet d'avoir un ordre suivant la clef.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par h2s84 Voir le message
    Je ne sais pas si ça pourra aider mais il peut utiliser la classe SortedDictionnary qui elle permet d'avoir un ordre suivant la clef.
    Non, avec ça les éléments sont triés selon la clé ; ce n'est pas la même chose que de les maintenir dans l'ordre dans lequel ils ont été ajoutés...

  7. #7
    Membre éclairé
    Homme Profil pro
    Technicien bio médical
    Inscrit en
    Décembre 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien bio médical
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2012
    Messages : 328
    Points : 768
    Points
    768
    Par défaut
    Bonjour,

    Vous pouvez remplacer le Dictionnaire par deux classes :
    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
     
    Public Class Personne
     
        Public Overridable Property Nom As String
        Public Overridable Property NDate As Date
     
        Public Sub New(ByVal _Name As String, ByVal _NDate As Date)
            Me.Nom = _Name
            Me.NDate = CType(_NDate, Date)
        End Sub
     
    End Class
     
    Public Class Personnes
        Inherits List(Of Personne)
    End Class
    Si vous voulez conserver le dictionnaire, vous pouvez le mettre dans un objet Personnes avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Class Personnes
        Inherits List(Of Personne)
    Public Sub New(ByVal _Dic As Dictionary(Of String, String))
            For i As Integer = 0 To _Dic.Count - 1 Step 2
                Dim _per As New Personne(_Dic.ElementAt(i).Value.ToString, CType(_Dic.ElementAt(i + 1).Value.ToString, Date))
                Me.Add(_per)
            Next
        End Sub
    End Class
    en priant pour que les données soient bien ordonnées dans le dictionnaire.
    Pensez que si des données ont une relation, il vaut mieux les regrouper dans un objet que s'embéter avec une multitude d'objets sans relation que l'on essaye de lier dans un code interminable et sans le moindre sens

    Pour tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim _dic As New Dictionary(Of String, String)
            With _dic
                .Add("key0", "Jean")
                .Add("key1", "10/05/2013")
                .Add("key2", "Marc")
                .Add("key3", "08/11/2012")
            End With
            Dim _lst As New Personnes(_dic)
            MessageBox.Show(_lst.ElementAt(0).Nom & " " & _lst.ElementAt(0).NDate)
        End Sub
    est ton amis, MSDN est ton maître, pour le reste il y a Developpez.net. Pensez au au et

Discussions similaires

  1. [PHP 5.3] Comment regrouper des elements d'un tableau par paire de 2
    Par Jarod51 dans le forum Langage
    Réponses: 2
    Dernier message: 23/04/2010, 11h02
  2. [Requête] Regroupement par mois en cours
    Par Burnout dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 09/01/2006, 09h36
  3. Réponses: 5
    Dernier message: 29/09/2004, 11h05
  4. [DB2]Requête regroupement par intervals
    Par sm dans le forum DB2
    Réponses: 8
    Dernier message: 01/09/2004, 17h19
  5. Regroupement par mois
    Par fplanglois dans le forum SQL
    Réponses: 7
    Dernier message: 29/07/2003, 16h32

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