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 Tri Liste de nombre


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 35
    Points : 27
    Points
    27
    Par défaut Fonction Tri Liste de nombre
    Bonjour,
    je cherche à créer une fonction qui prend en entrée un entier et une liste d'entier retournant l’élément i de la liste dont l'entier et le plus proche de la valeur entrée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int EntierCorrespondant(int valeur, List<int> ListeEntier)
    {
    ...
    return(i)
    }


    par exemple: j'ai une liste contenant 10, 15 ,30, 9 et une valeur 5 la fonction retournerai l'élément à la position 3 soit le 9.

    après imaginons que j'ai 10, 15 ,30, 9, 9 j'aimerai choisir l'un des deux 9 au hasard pour éviter un bug.

    Merci pour votre aide.

  2. #2
    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
    Tu peux faire quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public int EntierCorrespondant(int valeur, List<int> ListeEntier)
    {
        int closest = 0;
        bool first = true;
        foreach (var i in ListeEntier)
        {
            if (first || Math.Abs(i - valeur) < Math.Abs(closest - valeur))
            {
                closest = i;
                first = false;
            }
        }
        return closest;
    }
    Par contre il faudrait savoir ce que tu dois renvoyer si la liste est vide ; dans le code ci-dessus, ça renverra 0, ce qui n'est sans doute pas ce que tu veux. Le plus correct serait sans doute de lancer une exception dans ce cas.

    Sinon tu peux aussi utiliser la méthode d'extension MinBy de Dvp.NET :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int result = liste.MinBy(i => Math.Abs(i - valeur));
    Citation Envoyé par renovatio34 Voir le message
    après imaginons que j'ai 10, 15 ,30, 9, 9 j'aimerai choisir l'un des deux 9 au hasard pour éviter un bug.
    Bah ça change quoi ? que tu prennes le premier ou le deuxième, c'est toujours 9...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 35
    Points : 27
    Points
    27
    Par défaut
    en fait voila ce que j'ai déjà fait la fonction me retourne l'indice du chiffre le plus proche de la valeur entrée le problème c'est lorsque j'ai plusieurs même valeurs
    j'aimerai choisir l'indice au hasard d'une des valeurs qui apparaissent plusieurs fois.

    si j'ai

    liste[0]=8
    liste[1]=7
    liste[2]=7
    liste[3]=5
    liste[4]=7

    j'aimerai que ma fonction retourne au hasard 1,2 ou 4 .

    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
     
    private int FindInteger(int valeur, List<int> Liste)
           {
     
     
     
               List<int> ListeDifference = new List<int>();
     
               foreach (int x in Liste)
               {
                   ListeDifference.Add(Math.Abs(x - valeur));
     
     
     
               }
     
     
     
                   int i = 0;
                   while (ListeDifference.Min() != ListeDifference[i])
                   {
                       i++;
                   }
     
                    return (i);
     
     
           }

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/10/2012, 22h07
  2. Réponses: 13
    Dernier message: 25/04/2012, 18h04
  3. Tri d´une liste de nombre
    Par steph496 dans le forum MATLAB
    Réponses: 4
    Dernier message: 01/07/2009, 17h57
  4. [Fonction]tri sur liste déroulante
    Par maxeur dans le forum IHM
    Réponses: 8
    Dernier message: 16/04/2007, 10h00
  5. [VB6]fonction inverse de Hex (nombres hexadécimaux)
    Par Guigui_ dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 08/10/2002, 19h31

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