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 :

Comparaison tableau/hashtable C#


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 37
    Points : 10
    Points
    10
    Par défaut Comparaison tableau/hashtable C#
    Bonjour, je suis débutant et en alternance en informatique, j'ai fais une application et j'aimerais maintenant faire une comparaison entre un tableau et une hashtable.

    Mon tableau est déjà remplis et ma hashtable aussi.
    Exemple:

    Dans mon tableau j'ai 10 éléments : { 1,2,3,4,5,6,7,8,9,10 }
    Et dans ma hashtable j'ai 12 éléments (clés) : {1,2,3,4,5,6,7,8,9,10,11,12 }

    Je voudrais savoir quels éléments sont dans les deux listes, les quels sont que dans la liste 1 et les quels sont que dans la liste 2. Mais qu'avec un seul parcours. En sachant que chaque élément est unique dans son tableau/hashtable.
    J'ai réussi à le faire avec 2 parcours (comparaison du tableau par rapport à la hashtable puis comparaison de la hashtable par rapport au tableau), mais j'aimerais maintenant le faire avec seulement un parcours.

    Mon maître d'apprentissage, me demande de ne pas utiliser de fonctions spécifiques à C#, il me faut faire cela juste avec une solution purement algo.
    Il m'a donné un indice en me disant :
    "demande toi comment tu ferais si je te donnais deux listes de plus de 500 noms et que je te demandais lesquels sont dans les 2 listes et lesquels sont dans une liste et pas l'autre, en te donnant seulement un crayon pour y arriver"
    Donc voila, je bloque depuis quelques jours, j'aimerais avoir de l'aide
    Merci de vos futures réponses, bonne journée.

  2. #2
    Max
    Max est déconnecté
    Expert éminent sénior

    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 : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 979
    Points
    14 979
    Par défaut
    Salut
    Citation Envoyé par MaxLikeMilf Voir le message
    Mon maître d'apprentissage, me demande de ne pas utiliser de fonctions spécifiques à C#, il me faut faire cela juste avec une solution purement algo.

    Donc voila, je bloque depuis quelques jours, j'aimerais avoir de l'aide
    Et tu bloques où/comment ? On ne va pas pondre cet algo de zéro à ta place . Dans ce que tu montres tes données sont triées par ordre croissant, donc une seule boucle, deux indices (un pour le tableau, l'autre pour ta hashtable) et tu joues sur ces deux en fonction du résultat de la comparaison.

    Citation Envoyé par MaxLikeMilf Voir le message
    Mon maître d'apprentissage, me demande de ne pas utiliser de fonctions spécifiques à C#, il me faut faire cela juste avec une solution purement algo.
    Ce n'est que mon avis, mais je trouve ça contre-productif et absolument sans intérêt. C'est un exercice de type scolaire, pas professionnel (ton maître d'apprentissage, il doit t'apprendre à être un pro, pas à être un meilleur étudiant). En tant que développeur .NET professionnel, on s'attend à ce que tu connaisses le framework et utilises les méthodes et outils fournis par ce dernier (typiquement Linq dans ce cas), pas à développer comme on te demanderait de le faire dans un TP à l'IUT

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Alors, j'ai fais une boucle "while" jusqu’à la fin de mon tableau qui compare les éléments de mon tableau par rapport à ceux de ma hashtable.
    Puis juste apres j'ai refais une boucle "while (iEnum.MoveNext())" qui compare les clés de ma hashtable par rapport à mon tableau.
    Mais je dois faire cela que avec un seul parcours, une seule comparaison quoi...

    Je ne connais pas la fonction Linq... je suis vraiment débutant.
    Merci beaucoup de ton aide.

    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
    while (CompteurCPS < TotalDlls)
                {
                    string[] tokins = monTab[CompteurCPS].Split('\\');
                    FileVersionInfo myFileVersionInfo = FileVersionInfo.GetVersionInfo("C:\\Users\\maxursin\\Documents\\CppDll\\" + monTab[CompteurCPS]);
                    int cc = 0;
     
                    if (htDllsInfos.ContainsKey(monTab[CompteurCPS]))
                    {
                        string[] tokens = htDllsInfos[monTab[CompteurCPS]].ToString().Split('.');
                        string Convert = tokens[0];
                        string Convert1 = tokens[1];
                        string Convert2 = tokens[2];
                        string Convert3 = tokens[3];
                        int Converted = int.Parse(Convert);
                        int Converted1 = int.Parse(Convert1);
                        int Converted2 = int.Parse(Convert2);
                        int Converted3 = int.Parse(Convert3);
                        VersionDataBase = Converted + "." + Converted1 + "." + Converted2 + "." + Converted3;
                        cc=1;
                    }
                    else if (!htDllsInfos.ContainsKey(monTab[CompteurCPS]))
                    {
                        cc = 2;
                    }
                    VersionDirectory = myFileVersionInfo.FileVersion;
                    string[] tokons = VersionDirectory.Split('.');
                    string ConvertD = tokons[0];
                    string ConvertD1 = tokons[1];
                    string ConvertD2 = tokons[2];
                    string ConvertD3 = tokons[3];
                    int ConvertedD = int.Parse(ConvertD);
                    int ConvertedD1 = int.Parse(ConvertD1);
                    int ConvertedD2 = int.Parse(ConvertD2);
                    int ConvertedD3 = int.Parse(ConvertD3);
                    VersionDirectory = ConvertedD + "." + ConvertedD1 + "." + ConvertedD2 + "." + ConvertedD3;
     
                    if (cc == 0)
                    {
                        File.AppendAllText("C:\\Users\\maxursin\\Documents\\VersionsIdentical.log", monTab[CompteurCPS] + " | " + " 0 " + " | " + " 0 ");
                    }
                    else if (cc == 1)
                    {
                        File.AppendAllText("C:\\Users\\maxursin\\Documents\\VersionsIdentical.log", monTab[CompteurCPS] + " | " + VersionDataBase + " | " + VersionDirectory);
                    }
                    else if (cc == 2)
                    {
                        File.AppendAllText("C:\\Users\\maxursin\\Documents\\VersionsIdentical.log", monTab[CompteurCPS] + " | " + " 0 " + " | " + VersionDirectory);
                    }                               
                    if (VersionDataBase == VersionDirectory)
                    {
                        File.AppendAllText("C:\\Users\\maxursin\\Documents\\VersionsIdentical.log", " | 1" + "\r\n");
                    }
                    else
                    {
                        File.AppendAllText("C:\\Users\\maxursin\\Documents\\VersionsIdentical.log", "| 0" + "\r\n");
                        compteurNotIdemCps++;
                    }
                    CompteurCPS++;
                }

    Puis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     int i = 0;
                while (iEnum.MoveNext())
                {
                    string nom = iEnum.Key.ToString();
                    if (!monTab.Contains(nom))
                    {
                        File.AppendAllText("C:\\Users\\maxursin\\Documents\\VersionsIdentical.log", monTab[CompteurCPS] + " | " + VersionDataBase + " | " + " 0 ");
                    }
                    i++;
                }

  4. #4
    Max
    Max est déconnecté
    Expert éminent sénior

    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 : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 979
    Points
    14 979
    Par défaut
    Je te laisse dérouler et comprendre cet exemple générique :
    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
    int[] array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    // Au passage, j'utilise un Dictionary typé, infiniment plus pratique qu'une Hashtable… Il me semble que je te l'avais déjà fait remarquer
    // Cf. https://stackoverflow.com/questions/301371/why-is-dictionary-preferred-over-hashtable
    IDictionary<int, string> dictionary = new Dictionary<int, string> {
        { 1, string.Empty },
        { 2, string.Empty },
        { 3, string.Empty },
        { 6, string.Empty },
        { 7, string.Empty },
        { 8, string.Empty },
        { 9, string.Empty },
        { 10, string.Empty },
        { 11, string.Empty },
        { 12, string.Empty }
    };
     
    // Version boulot en Linq (t'as vu c'est clean et rapide)
    var inBoth = array.Intersect(dictionary.Keys);
    var inArrayOnly = array.Except(dictionary.Keys);
    var inDictionaryOnly = dictionary.Keys.Except(array);
     
    // Version scolaire (on considère toujours que le tableau et le dictionnaire sont triés par ordre croissant, et sans doublons)
    int arrayIndex = 0;
    int dictionaryIndex = 0;
    int[] dictionaryKeysArray = dictionary.Keys.ToArray();
     
    while (arrayIndex < array.Length || dictionaryIndex < dictionaryKeysArray.Length) {
        if (arrayIndex >= array.Length) {
            // Cas où le dictionnaire contient des valeurs plus grandes que le tableau
            Console.WriteLine($"{dictionaryKeysArray[dictionaryIndex]} is only in the dictionary");
            dictionaryIndex++;
        }
        else if (dictionaryIndex >= dictionaryKeysArray.Length) {
            // Cas où le tableau contient des valeurs plus grandes que le dictionnaire
            Console.WriteLine($"{array[arrayIndex]} is only in the array");
            arrayIndex++;
        }
        else {
            // Cas "normal" où on compare
            if (array[arrayIndex] == dictionaryKeysArray[dictionaryIndex]) {
                Console.WriteLine($"{array[arrayIndex]} is both in the array and in the dictionary");
                arrayIndex++;
                dictionaryIndex++;
            }
            else if (array[arrayIndex] > dictionaryKeysArray[dictionaryIndex]) {
                Console.WriteLine($"{dictionaryKeysArray[dictionaryIndex]} is only in the dictionary");
                dictionaryIndex++;
            }
            else {
                Console.WriteLine($"{array[arrayIndex]} is only in the array");
                arrayIndex++;
            }
        }
    }

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    J'ai compris l’exemple, cela m'aide, merci.
    Mais si dans les clés, c'est un string et non un int. Comment peut-on faire ?

    Par exemple moi j'ai deux listes:

    Liste 1: {CPS1,CPS2,CPS3,CPS4,CPS5,CPS12,CPS7,CPS8,CPS9,CPS10} (en string)
    Liste 2 : {CPS1,CPS2,CPS3,CPS4,CPS5,CPS6,CPS7,CPS8,CPS9,CPS10,CPS11,CPS12} (en string)

    Je dois dire que CPS1/2/3/4/5/7/8/9/10 sont dans les deux.
    CPS12 n'est que dans la liste 1...
    CPS11/12 ne sont que dans la liste 2...

    Merci,

  6. #6
    Max
    Max est déconnecté
    Expert éminent sénior

    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 : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 979
    Points
    14 979
    Par défaut
    Citation Envoyé par MaxLikeMilf Voir le message
    Mais si dans les clés, c'est un string et non un int. Comment peut-on faire ?
    Tout ce que j'ai typé en int tu le types en string. Et la comparaison au lieu d'un simple > tu utilises string.Compare.

    Et là ça peut devenir foireux parce que tes chaînes contiennent des chiffres . Par exemple avec une comparaison alphabétique de ce type, eh bien CPS10 il devient "inférieur" à CPS2 (1 est avant 2). Si tu voulais être parfaitement propre, faudrait isoler le "CPS", parser le reste en int pour ensuite comparer ces valeurs d'un point de vue numérique, etc., etc. (et je te parle même pas de la comparaison qui est case sensitive, du fait qu'elle dépende de la culture…)

    Alors qu'avec la solution Linq rien ne change tu restes pépère (peu importe le type, on se fiche que ce soit trié ou pas). Bref se forcer à utiliser "un algo à une boucle", c'est ni facile ni efficace ni souple ni évolutif, dans ce cas ça va à l'encontre même de l'essence de ce métier

  7. #7
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 895
    Points : 1 911
    Points
    1 911
    Par défaut
    Pourquoi utiliser une hashmap (types Hashtable ou Dictionnary<TKey, TValue> en .Net) si on utilise pas les valeurs ? Un Hashset ne serait-il pas suffisant s'il s'agit simplement de vérifier l'existence d'une valeur ?

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Max Voir le message
    Tout ce que j'ai typé en int tu le types en string. Et la comparaison au lieu d'un simple > tu utilises string.Compare.

    Et là ça peut devenir foireux parce que tes chaînes contiennent des chiffres . Par exemple avec une comparaison alphabétique de ce type, eh bien CPS10 il devient "inférieur" à CPS2 (1 est avant 2). Si tu voulais être parfaitement propre, faudrait isoler le "CPS", parser le reste en int pour ensuite comparer ces valeurs d'un point de vue numérique, etc., etc. (et je te parle même pas de la comparaison qui est case sensitive, du fait qu'elle dépende de la culture…)

    Alors qu'avec la solution Linq rien ne change tu restes pépère (peu importe le type, on se fiche que ce soit trié ou pas). Bref se forcer à utiliser "un algo à une boucle", c'est ni facile ni efficace ni souple ni évolutif, dans ce cas ça va à l'encontre même de l'essence de ce métier
    Mais du coup, avec Linq , on remplace quoi par quoi?

    var inBoth = array.Intersect(dictionary.Keys);
    var inArrayOnly = array.Except(dictionary.Keys);
    var inDictionaryOnly = dictionary.Keys.Except(array);

    Je n'est pas trop compris ou je dois mettre ces variables?

  9. #9
    Max
    Max est déconnecté
    Expert éminent sénior

    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 : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 979
    Points
    14 979
    Par défaut
    Citation Envoyé par MaxLikeMilf Voir le message
    Mais du coup, avec Linq , on remplace quoi par quoi?
    Tu remplaces :
    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
    int[] array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    // Au passage, j'utilise un Dictionary typé, infiniment plus pratique qu'une Hashtable… Il me semble que je te l'avais déjà fait remarquer
    // Cf. https://stackoverflow.com/questions/301371/why-is-dictionary-preferred-over-hashtable
    IDictionary<int, string> dictionary = new Dictionary<int, string> {
        { 1, string.Empty },
        { 2, string.Empty },
        { 3, string.Empty },
        { 6, string.Empty },
        { 7, string.Empty },
        { 8, string.Empty },
        { 9, string.Empty },
        { 10, string.Empty },
        { 11, string.Empty },
        { 12, string.Empty }
    };
    Par :
    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
    string[] array = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "13", "17" };
    // Au passage, j'utilise un Dictionary typé, infiniment plus pratique qu'une Hashtable… Il me semble que je te l'avais déjà fait remarquer
    // Cf. https://stackoverflow.com/questions/301371/why-is-dictionary-preferred-over-hashtable
    IDictionary<string, string> dictionary = new Dictionary<string, string> {
        { "1", string.Empty },
        { "2", string.Empty },
        { "3", string.Empty },
        { "6", string.Empty },
        { "7", string.Empty },
        { "8", string.Empty },
        { "9", string.Empty },
        { "10", string.Empty },
        { "11", string.Empty },
        { "12", string.Empty }
    };
    Et le reste ne change pas (le mot clé var fait que l'inférence de type va être utilisée ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var inBoth = array.Intersect(dictionary.Keys);
    var inArrayOnly = array.Except(dictionary.Keys);
    var inDictionaryOnly = dictionary.Keys.Except(array);
    Après les noms de méthodes sont assez parlants, pas besoin de t'en dire plus

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Max Voir le message
    Tu remplaces :
    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
    int[] array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    // Au passage, j'utilise un Dictionary typé, infiniment plus pratique qu'une Hashtable… Il me semble que je te l'avais déjà fait remarquer
    // Cf. https://stackoverflow.com/questions/301371/why-is-dictionary-preferred-over-hashtable
    IDictionary<int, string> dictionary = new Dictionary<int, string> {
        { 1, string.Empty },
        { 2, string.Empty },
        { 3, string.Empty },
        { 6, string.Empty },
        { 7, string.Empty },
        { 8, string.Empty },
        { 9, string.Empty },
        { 10, string.Empty },
        { 11, string.Empty },
        { 12, string.Empty }
    };
    Par :
    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
    string[] array = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "13", "17" };
    // Au passage, j'utilise un Dictionary typé, infiniment plus pratique qu'une Hashtable… Il me semble que je te l'avais déjà fait remarquer
    // Cf. https://stackoverflow.com/questions/301371/why-is-dictionary-preferred-over-hashtable
    IDictionary<string, string> dictionary = new Dictionary<string, string> {
        { "1", string.Empty },
        { "2", string.Empty },
        { "3", string.Empty },
        { "6", string.Empty },
        { "7", string.Empty },
        { "8", string.Empty },
        { "9", string.Empty },
        { "10", string.Empty },
        { "11", string.Empty },
        { "12", string.Empty }
    };
    Et le reste ne change pas (le mot clé var fait que l'inférence de type va être utilisée ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var inBoth = array.Intersect(dictionary.Keys);
    var inArrayOnly = array.Except(dictionary.Keys);
    var inDictionaryOnly = dictionary.Keys.Except(array);
    Après les noms de méthodes sont assez parlants, pas besoin de t'en dire plus
    J'ai fais ce que tu m'a dis, mais cela fait une erreur au :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    else if (array[arrayIndex] > dictionaryKeysArray[dictionaryIndex])

  11. #11
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 895
    Points : 1 911
    Points
    1 911
    Par défaut
    Quelle erreur ?

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Noxen Voir le message
    Quelle erreur ?

    Impossible d'appliquer l'opérateur '>' aux opérandes de type 'string' et 'string'

  13. #13
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 895
    Points : 1 911
    Points
    1 911
    Par défaut
    Effectivement l'opérateur > n'existe pas pour la classe String. Il faut utiliser la méthode string.CompareTo(string), qui renvoie un entier :
    * inférieur à 0 si la première chaîne est avant la seconde ("a".CompareTo("b")) ;
    * 0 si les chaines ont le même ordre ("a".CompareTo("a")) ;
    * supérieur à 0 si la première chaîne est après la seconde ("b".CompareTo("a")).

    L'équivalent de s1 > s2 est s1.CompareTo(s2) > 0.

  14. #14
    Max
    Max est déconnecté
    Expert éminent sénior

    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 : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 979
    Points
    14 979
    Par défaut
    Citation Envoyé par Max Voir le message
    Tout ce que j'ai typé en int tu le types en string. Et la comparaison au lieu d'un simple > tu utilises string.Compare.

    Et là ça peut devenir foireux parce que tes chaînes contiennent des chiffres . Par exemple avec une comparaison alphabétique de ce type, eh bien CPS10 il devient "inférieur" à CPS2 (1 est avant 2). Si tu voulais être parfaitement propre, faudrait isoler le "CPS", parser le reste en int pour ensuite comparer ces valeurs d'un point de vue numérique, etc., etc. (et je te parle même pas de la comparaison qui est case sensitive, du fait qu'elle dépende de la culture…)

    Alors qu'avec la solution Linq rien ne change tu restes pépère (peu importe le type, on se fiche que ce soit trié ou pas). Bref se forcer à utiliser "un algo à une boucle", c'est ni facile ni efficace ni souple ni évolutif, dans ce cas ça va à l'encontre même de l'essence de ce métier
    Citation Envoyé par MaxLikeMilf Voir le message
    Impossible d'appliquer l'opérateur '>' aux opérandes de type 'string' et 'string'
    Faut bien lire les réponses

  15. #15
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup.

Discussions similaires

  1. Comparaison tableau Excel et classe java avec Objets
    Par cisco.nat dans le forum Collection et Stream
    Réponses: 17
    Dernier message: 19/06/2013, 16h45
  2. [Débutant] Comparaison tableau int[]
    Par traz0m76 dans le forum C#
    Réponses: 4
    Dernier message: 20/02/2013, 22h10
  3. Comparaison Tableau de String avec un string
    Par halloumiali dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 19/03/2012, 15h21
  4. [XL-2007] Comparaison tableau entre 2 feuilles
    Par flavien.d dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 03/05/2011, 08h37
  5. comparaison de Hashtables
    Par MattCand dans le forum Langage
    Réponses: 10
    Dernier message: 06/12/2010, 16h26

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