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 :

[c#]Comparer avec argument


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Par défaut [c#]Comparer avec argument
    Bonjour,
    J'utilise un comparer comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public int Compare(object x, object y)
    {
         Ouvrage Ouvrage1 = (Ouvrage) x;
         Ouvrage Ouvrage2 = (Ouvrage) y;
         int Code1,Code2;
         Code1 = System.Int32.Parse(Ouvrage1.CodePat.Substring(Ouvrage1.CodePat.Length-3,3));
         Code2 = System.Int32.Parse(Ouvrage2.CodePat.Substring(Ouvrage2.CodePat.Length-3,3));
         return Ordre1 .CompareTo(Ordre1 );
    }
    En fait, je voudrais selon les cas que l'un des chiffres récupérés via Code1 et Code2 soit prioritaire. Sachant que ce ne serait pas toujours le même.
    Imaginons un liste
    1 3 5 4 2 8 6
    Ce comparer me rendrait 1 2 3 4 5 6 8
    Moi j'aimerais pouvoir dire que de temps en temps le 6 est prioritaire est obtenir 6 1 2 3 4 5 8
    Ceci pouvant également être un autre chiffre.
    Ceci est-il possible dans le Framework 1.1?
    Merci d'avance
    Cordialement
    Pinocchio

    PS : En réalité ceeux ne sont pas des int avec quoi je travaille donc si possible une solution adaptable aux string, date, ...

  2. #2
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    Oui c'est possible mais c'est toi qui dois le faire Ton problemes est un peu specifique et le Framework .Net ne peut pas proposer des solutions pour tout problemes car il est assez generique. Je te propose de faire le trie tout simplement et puis tu cree un autre tableau ou liste en fonction de la valeur prioritaire. Regarde ce petit programme il peut t'aider.
    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
    class Program {
            static void Main(string[] args) {
                int[] data = new int[10];
                int prior = 7;
                for (int i = 0; i < data.Length; i++) {
                    data[i] = data.Length - i;
                }
     
                Array.Sort(data);
     
                int count = 0;
                foreach (int i in data) {
                    if (i == prior) {
                        count++;
                    }
                }
     
                int[] prData = new int[data.Length];
                for (int i = 0; i < count; i++) {
                    prData[i] = prior;
                }
     
                for (int i = count; i < data.Length; i++) {
                    prData[i] = data[i];
                }
     
                foreach (int i in prData) {
                    Console.WriteLine(i);
                }
            }
        }
    Il peut etre simplifier si tu sais que tu n'as pas de doublons.
    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
    class Program {
            static void Main(string[] args) {
                int[] data = new int[10];
                int prior = 7;
                for (int i = 0; i < data.Length; i++) {
                    data[i] = data.Length - i;
                }
     
                Array.Sort(data);
     
                int[] prData = new int[data.Length];
                prData[0] = prior;
     
                for (int i = 1; i < data.Length; i++) {
                    prData[i] = data[i];
                }
     
                foreach (int i in prData) {
                    Console.WriteLine(i);
                }
            }
        }
    A+

  3. #3
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Par défaut
    Citation Envoyé par scifire
    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
    class Program {
            static void Main(string[] args) {
                int[] data = new int[10];
                int prior = 7;
                for (int i = 0; i < data.Length; i++) {
                    data[i] = data.Length - i;
                }
     
                Array.Sort(data);
     
                int count = 0;
                foreach (int i in data) {
                    if (i == prior) {
                        count++;
                    }
                }
     
                int[] prData = new int[data.Length];
                for (int i = 0; i < count; i++) {
                    prData[i] = prior;
                }
     
                for (int i = count; i < data.Length; i++) {
                    prData[i] = data[i];
                }
     
                foreach (int i in prData) {
                    Console.WriteLine(i);
                }
            }
        }
    Dans ta dernière boucle, tu ajoutes toutes tes valeurs y compris celle que tu as mis entant que prioritaire sinon ca me va bien.
    Merci
    Pinocchio

  4. #4
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Par défaut
    Mose,
    Merci pour ta solution.
    Cordialement
    Pinocchio

  5. #5
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    Oui t'as raison il me manque le if et le continue De plus le code n'est pas 100% correct mais bon c'etait juste pour illustrer l'idee.

  6. #6
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Par défaut
    Scifire, c'est pour ça que je te remercie tout autant que pour l'autre solution. Tu m'as aidé, c'est à nous poseur de questions de savoir analyser vos éléments de réponses.
    Merci encore

  7. #7
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut Réponse
    Tu créé une classe "ObjectWithPriority" qui contient :
    - un entier (la priorité) initialisé à -1
    - une valeur (string/int/...)

    Quand tu compares :
    - si ta priorité est -1, comparaison normale
    - si ta priorité est affectée, tu fais passer le plus prioritaire en premier

    Ca t'oblige à wrapper tes valeurs, mais c'est assez modulable.
    ---------------------------------------------------------------
    Sinon, solution numéro 2 :
    Tu créé une Hashtable static dans ta classe IComparer
    Quand tu veux prioriser un objet A, tu l'ajoute à ta Hashtable avec A comme clef et un entier (ta priorité) comme valeur

    Quand tu compares :
    - si un des deux objets est dans ta Hashtable, il passe d'abord
    - si les deux y sont, tu récupères leurs priorités et tu fais passer le plus prioritaire en premier

    Le seul soucis c'est l'utilisation d'une variable static. Sur un site web il sera partagé par tous les utilisateurs

  8. #8
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    Citation Envoyé par Mose

    Quand tu compares :
    - si ta priorité est -1, comparaison normale
    - si ta priorité est affectée, tu fais passer le plus prioritaire en premier
    Comment "tu fais passer le plus prioritaire en premier" ? C'est toi qui fais le tri ?

  9. #9
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Bah oui...
    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
    public int Compare(object x, object y)
    {
        // valeur de retour
        int retour = 0;
        // on récupère la priorité (quelle que soit la méthode)
        int p1 = this.GetPriority(x);
        int p2 = this.GetPriority(y);
        // on met retour à jour
        retour = (p1 - p2);
        // si on a une égalité : soit ils ont la même priorité, soit ils n'en ont pas
        if(retour == 0)
            // on compare alors les valeurs
            retour = x.CompareTo(y);
        return retour;
    }

  10. #10
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Je te propose de faire le trie tout simplement et puis tu cree un autre tableau ou liste en fonction de la valeur prioritaire.
    Oulà ! T'es un bourrin toi
    (et moi je sais pas utiliser la balise QUOTE)

  11. #11
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    Vraiment je vois pas comment avec ton code on va faire passer le plus prioritaire en premier Peut-etre c'est ma faute. Si pinocchio reussit de faire ce qu'il veut avec, c'est bon.

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

Discussions similaires

  1. Fonction callback avec arguments ?
    Par sorry60 dans le forum GTK+ avec C & C++
    Réponses: 39
    Dernier message: 07/11/2005, 10h41
  2. appel d'un module externe avec argument en entree
    Par oursblanc dans le forum Modules
    Réponses: 6
    Dernier message: 20/10/2005, 23h16
  3. creer une fonction avec arguments
    Par niglo dans le forum ASP
    Réponses: 3
    Dernier message: 03/06/2005, 08h04
  4. Comparer avec le coprocesseur
    Par hams dans le forum Assembleur
    Réponses: 1
    Dernier message: 01/05/2005, 15h36
  5. [C#] Equivalent Property avec arguments de VB.NET
    Par Antz dans le forum Windows Forms
    Réponses: 4
    Dernier message: 26/03/2004, 13h14

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