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

C# Discussion :

Fonction pour traiter un Dictionary


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de reeda
    Formateur en informatique
    Inscrit en
    Août 2006
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 367
    Par défaut Fonction pour traiter un Dictionary
    Bonjour tout le monde,

    je voudrais créer une fonction qui va me permettre de traiter les clés d'une Dictionary, quelque soit le type de valeur qu'elle prennent,

    mais mon problème c'est ce que je ne sais pas comment m'y prendre,

    voici la fonction que j'ai créé et que je voudrais améliorer :
    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
     
    /// <summary>
    /// Ajust une liste en décalant toute la liste à partir du begin avec le pas decalage
    /// </summary>
    /// <param name="list">La liste à décaler</param>
    /// <param name="decelage">Le pas de décalage</param>
    /// <param name="begin">Emplacement duquel on va entamer le décalage</param>
    public void adjustList(Dictionary<Int64, int> listToAdjust, int decelage, Int64 begin)
    {
        if (listToAdjust.Count != 0)
        {
            Dictionary<Int64, int> liste = new Dictionary<Int64, int>();
     
            // récuperation des couples à décaler
            foreach (KeyValuePair<Int64, int> couple in listToAdjust)
            {
                if (couple.Key >= begin)
                    liste.Add(couple.Key, couple.Value);
            }
     
            if (liste.Count != 0)
            {
                // suppression des inserts qui devront être décalés
                foreach (KeyValuePair<Int64, int> couple in liste)
                    listToAdjust.Remove(couple.Key);
     
                // ajout des inserts précedement supprimés avec le décalage souhaité
                foreach (KeyValuePair<Int64, int> couple in liste)
                    listToAdjust.Add(couple.Key + decelage, couple.Value);
            }
        }
    }
    et mon problème exact c'est que je voudrais utiliser la même méthode pour un Dictionary<Int64, int[]> , sachant que la fonction ne touche qu'aux clés.

    Merci d'avance pour votre aide
    Bien cordialement

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Bonjour.

    Regarde du coté des fonctions génériques.
    De cette manière, tu pourras passer le / les paramètres que tu veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void adjustList(Dictionary<Int64, T> listToAdjust ... )
    {
    ...
    }
    Et tu peux utiliser T avec n'importe quel type.
    Je te laisse jeter un œil a la documentation.

    Cordialement,
    PKO

  3. #3
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Salut.

    Ca me paraît difficile sans un peu de bricolage . En effet, tu pourrais utiliser des génériques, mais le souci est qu'il y a une différenciation au niveau des tableaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void adjustList<T>(Dictionary<Int64, T> listToAdjust, int decelage, Int64 begin)
    // Est différent de
    public void adjustList<T>(Dictionary<Int64, T[]> listToAdjust, int decelage, Int64 begin)
    Donc je pense qu'une façon possible de procéder serait de transformer ton int[] en List<int> et là tu pourrais utiliser une seule et même signature :
    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
    public void adjustList<T>(Dictionary<Int64, T> listToAdjust, int decelage, Int64 begin) {
    	if (listToAdjust.Count != 0) {
    		Dictionary<Int64, T> liste = new Dictionary<Int64, T>();
     
    		// récuperation des couples à décaler
    		foreach (KeyValuePair<Int64, T> couple in listToAdjust) {
    			if (couple.Key >= begin)
    				liste.Add(couple.Key, couple.Value);
    		}
     
    		if (liste.Count != 0) {
    			// suppression des inserts qui devront être décalés
    			foreach (KeyValuePair<Int64, T> couple in liste)
    				listToAdjust.Remove(couple.Key);
     
    			// ajout des inserts précedement supprimés avec le décalage souhaité
    			foreach (KeyValuePair<Int64, T> couple in liste)
    				listToAdjust.Add(couple.Key + decelage, couple.Value);
    		}
    	}
    }
    Voilà, je pense que c'est une solution parmi d'autres

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    eusebe19 > Oh, bien vu le coup de l'utilisation de List<> ! Je ne savais pas que les génériques faisaient la différence avec les tableaux.

    Ça vient du fait que les Tableaux en C# ne sont pas des pointeurs, contrairement au C++, c'est bien ca ?

    Cordialement,
    PKO

  5. #5
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Citation Envoyé par Altess Voir le message
    Ça vient du fait que les Tableaux en C# ne sont pas des pointeurs, contrairement au C++, c'est bien ca ?
    On va dire que je botte en touche

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Mince. tant pis pour moi

  7. #7
    Membre éclairé Avatar de reeda
    Formateur en informatique
    Inscrit en
    Août 2006
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 367
    Par défaut
    salut,

    Merci les gars pour vos suggestions, la solution du type générique est parfaite, c'est ce qu'il me fallait exactement, et en se qui concerne le tableau, l'objet List convient plus à mon problème

    Merci encore une fois
    Bien cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 02/09/2009, 18h24
  2. Fonction pour savoir si un ordi est connecté au reseau
    Par LitteulKevin dans le forum Windows
    Réponses: 17
    Dernier message: 13/09/2004, 14h12
  3. Réponses: 2
    Dernier message: 04/09/2004, 10h53
  4. Détourner une fonction pour copier un fichier en mémoire
    Par Rodrigue dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/11/2003, 08h29
  5. Fonction pour récuperer mon adresse IP
    Par néo333 dans le forum Web & réseau
    Réponses: 11
    Dernier message: 01/11/2003, 17h35

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