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# 2.0] Comment tester si un nbre appartient à une liste ?


Sujet :

C#

  1. #1
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut [C# 2.0] Comment tester si un nbre appartient à une liste ?
    Bonjour,

    Voila j'ai un petit problème d'optimisation de mon code!

    J'ai 20 nombres:

    416,417,464,465,500,501,542,543,596,597,...

    je doit comparé un numéro qui change dans a chaque passage de ma boucle a chacun de ces 20 numéro! Sachant que les 20 num sont toujours identique! Si il est égal une action doit être éxécuté!

    Comment faire le mieux possible?

    un if avec le test des 20 num?

    if(RF==417||RF==416||RF==464|||...)

    Ou y a t'il un meilleur moyen?

    Merci

    Thierry
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Tu prends une arrayList (ou une autre collection) dans laquelle tu stockes tes 20 nombres.

    Ensuite, tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if ( MonArrayList.Contains(ton_nombre) )
    {
         // Ton nombre fais partit des  20 sélectionnés
    }

  3. #3
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Ok j'y avais aussi pensé mais je ne connaissais pas la méthode contains je me suis donc dit qu'un boucle pour testé le tout étais moins performant!

    merci beaucoup

    ++

    Thierry
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Il y a plus léger en manipulant Array (puisque la liste est fixe)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int[] maliste = new int[]{416,417,464,465,500,501,542,543,596,597,... };
     
    private bool contains(int number)
    {
       return (Array.IndexOf(maliste, number) != -1);
    }
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut
    Et vu que la liste est fixe, la trier et utiliser BinarySearch sera encore plus efficace.
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

  6. #6
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Salut,

    Le résolu ne vous arrête pas vous! c'est génial!

    Citation Envoyé par Maniak
    Et vu que la liste est fixe, la trier et utiliser BinarySearch sera encore plus efficace.
    Tu pourrais être un peux plus explicite car la je comprend pas bien ou tu veux en venir!

    Citation Envoyé par neguib
    Il y a plus léger en manipulant Array (puisque la liste est fixe)

    Code:
    int[] maliste = new int[]{416,417,464,465,500,501,542,543,596,597,... };

    private bool contains(int number)
    {
    return (Array.IndexOf(maliste, number) != -1);
    }
    ok mais je ne comprend pas trop d'ou vient Array? c'est un élément vide?

    Merci mille fois pour ces idées!

    ++

    Thierry
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  7. #7
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par virgul
    ok mais je ne comprend pas trop d'ou vient Array? c'est un élément vide?
    System.Array
    Cette Classe propose egalement une fonction static comme te le signale Maniak > BinarySearch qui est utilisable sur un tableau trié (ce qui semble déjà ton cas). Certainement que Maniak estime l'appel à l'API interne TrySZBinarySearch plus efficace que celui à TrySZIndexOf
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut
    Citation Envoyé par virgul
    Citation Envoyé par Maniak
    Et vu que la liste est fixe, la trier et utiliser BinarySearch sera encore plus efficace.
    Tu pourrais être un peux plus explicite car la je comprend pas bien ou tu veux en venir!
    C'est un peu fait exprès, ce sont des indices à utiliser dans tes recherches :)
    Dans le cas présent, chercher BinarySearch dans MSDN et suivre le fil sur les diverses pages tournant autour du fonctionnement des collections. Tu comprendras bien mieux en cherchant par toi-même qu'en ayant du code tout fait entre les pattes :)

    (en tout cas c'est ma méthode :)


    Citation Envoyé par neguib
    Certainement que Maniak estime l'appel à l'API interne TrySZBinarySearch plus efficace que celui à TrySZIndexOf :wink:
    Je me préoccupe rarement de ce qui se passe en interne :)

    Mais IndexOf/Contains font une bête boucle alors que BinarySearch fait... ben une recherche binaire :)
    Évidemment il faut encore tenir compte de la taille de la collection initiale et de la nécessité de la trier d'abord, qui rendent tout ça inutile à petite échelle, mais bon. Ça reste un 'outil' à connaitre, pour pouvoir choisir :)
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 09/03/2010, 16h25
  2. Réponses: 2
    Dernier message: 26/04/2008, 17h31
  3. Comment tester si un caractère est une lettre ?
    Par Coussati dans le forum Débuter
    Réponses: 4
    Dernier message: 14/01/2008, 20h00
  4. Comment tester si on a selectionné une ligne ou une colonne
    Par damoiselle dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/12/2007, 12h07
  5. comment tester si un chiffre ou une lettre?
    Par marc_calagac dans le forum VBA Access
    Réponses: 4
    Dernier message: 27/06/2007, 15h34

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