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

Windows Forms Discussion :

minimum et maximum d'une list ou d'un tableau


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 81
    Points : 37
    Points
    37
    Par défaut minimum et maximum d'une list ou d'un tableau
    bonjours a tous , encore un defi de taille pour ma nulité en C#.

    je vous explique donc mon problème.

    j'ai effectue des conversion de corrdonnée de latitude et de longitude, je fait rentrer ces données dans une liste de pointF. j'aimerai recuperer maintenant au les MIN et les MAX de cette liste , je voudrai savoir comment je pourrait faire, avoir un exemple de code.

    merci

  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
    Min et max en fonction de quoi ? Un point n'est pas intrinsèquement plus "grand" ou plus "petit" qu'un autre, il faut définir un critère de comparaison.

    Supposons par exemple que tu veuilles chercher le point avec la plus grande valeur de X. Une approche simple est de faire une boucle en maintenant une variable qui contient la plus grande valeur rencontrée jusqu'ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    List<PointF> points = ...
     
    float xMax = float.MinValue;
    PointF pMax = default(PointF);
    foreach(PointF p in points)
    {
        if (p.X > xMax)
        {
            xMax = p.X;
            pMax = p;
        }
    }
    A la fin de la boucle, pMax est le point qui a le plus grand X

    Sinon tu peux aussi utiliser Linq :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PointF pMax = points.OrderByDesc(p => p.X).FirstOrDefault();
    Mais cette technique n'est pas la plus efficace, car elle trie la liste alors qu'il suffirait de la parcourir une fois

    Si tu veux juste récupérer le plus grand X (et non le point qui a le plus grand X), c'est plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float xMax = points.Max(p => p.X);

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 81
    Points : 37
    Points
    37
    Par défaut
    je vais expliquer plus concrètement mais tu as raison dans ce que tu dis car je dois définir par rapport a quoi ( et je vais dire par rapport au point (0,0) ) :

    l'idée est ceci : récupèrer des coordonnées GPS , de les trier, de mettre ces coordonnées dans une picture box pour tracer le périmètre d'un champ agricole.


    je calcul 2 distances curvilignes:
    - entre le point B et l'équateur. que j'appele DEB
    - entre le point B et le méridien. que j'appelle DMB
    je met ces deux distance dans une liste de points.

    pour pouvoir zoomer , je dois retourver DEB MIN et MAX ainsi que DMB MIN et MAX dans cette liste afin de pouvoir inscrire tout le champ dans un rectangle ce qui effectuerai mon zoom...

  4. #4
    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
    OK donc c'est à peu près ce que je disais, mais en plus simple... DMB et DEB correspondent respectivement à X et Y.

    Vu que tu veux le min et le max de deux propriétés, la première solution que j'ai proposée est la plus adaptée, parce qu'elle permet de ne parcourir la liste qu'une seule fois. Au final ça donne 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
    15
    16
    17
    18
    List<PointF> points = ...
     
    float xMin = float.MaxValue; // DMB min
    float xMax = float.MinValue; // DMB max
    float yMin = float.MaxValue; // DEB min
    float.yMax = float.MinValue; // DEB max
     
    foreach(PointF p in points)
    {
        if (p.X < xMin)
            xMin = p.X;
        if (p.X > xMax)
            xMax = p.X;
        if (p.Y < yMin)
            yMin = p.Y;
        if (p.Y > yMax)
            yMax = p.y;
    }

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/09/2010, 11h08
  2. Suppression du maximum d'une liste
    Par momo1367 dans le forum Pascal
    Réponses: 1
    Dernier message: 25/05/2008, 18h22
  3. [PL /SQL] - Maximum d'une liste
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 2
    Dernier message: 29/11/2006, 12h02
  4. Réponses: 2
    Dernier message: 29/03/2006, 18h47
  5. Maximum d'une liste
    Par deubal dans le forum Langage
    Réponses: 3
    Dernier message: 02/12/2005, 01h49

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