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

Dotnet Discussion :

Calculer l'interval entre la liste de chiffres


Sujet :

Dotnet

  1. #1
    Membre confirmé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Points : 637
    Points
    637
    Par défaut Calculer l'interval entre la liste de chiffres
    Bonjour,


    J'ai une liste de chiffre de type:

    [10,12,16,21,64,65,90]

    Comment puis en ressortir une liste avec les intervals ?
    Ce qui ne donnerai [2,4,5,43,1,25]

    Est ce possible avec Linq ?

    Merci
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  2. #2
    Membre confirmé Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Points : 461
    Points
    461
    Par défaut
    Bonjour ,
    Comme le tableau , la liste peut être manipulé avec les indices , ainsi tu peut récupérer le premier élément de ta liste comme ceci :
    il te suffit de créer une nouvelle liste , qui bouclera sur la première en ajoutant la différence entre l'indice i et l'indice i-1 .

    Pour Linq , je ne suis pas assez à l'aise pour en parler
    throw new NoSignatureException();

  3. #3
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    Il y a une ambiguite à lever ,la "soustraction" etant une operation diabolique car son resultat peut etre positif ou negative et en ce qui me concerne sa seule evocation me rends mefiant !!! ...

    Soit l'element courant elem(i) ...
    On peut calculer soit :
    1/ l'intervalle :
    - elem(i)-elem(i+1)

    soit
    2/ l'intervalle :
    - elem(i+1) - elem(i)

    Cette ambiguite etant levee, ton exemple faisant reference à 2/, cela est possible en Linq
    en jonglant avec les index des elements:

    code .cs avec ton exemple de list<int> chiffres :
    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
    60
     
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WinIntervalle
    {
        public partial class Form1 : Form
        {
            private List<int> chiffres = new List<int>();
            private Random rnd = new Random();
            private StringBuilder sb = new StringBuilder();
            public Form1()
            {
                InitializeComponent();
            }
     
            private void btnListEntree_Click(object sender, EventArgs e)
            {
                chiffres = new List<int>() { 10, 12, 16, 21, 64, 65, 90 };
     
     
                textBox1.Clear();
                foreach (var item in chiffres)
                {
                    sb.Append(item.ToString() + " ; ");
     
                }
                textBox1.Text = sb.ToString();
     
            }
     
            private void btnListSortie_Click(object sender, EventArgs e)
            {
     
                IEnumerable<int> queryIntervalle =
                    from c1 in chiffres
                    from c2 in chiffres
                    where chiffres.IndexOf(c2) == chiffres.IndexOf(c1) + 1
                    let s = c2 - c1
                    select s;
     
                //store le list pour usage ulterieur
                List<int> result = queryIntervalle.ToList();
                textBox2.Clear();
                sb.Clear();
                foreach (var item in result)
                {
                    sb.Append(item.ToString() + " ; ");
                }
                textBox2.Text = sb.ToString();
            }
        }
    }
    code .cs avec un list<int> "random" chiffres plus volumineux:
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WinIntervalle
    {
        public partial class Form2 : Form
        {
            private List<int> chiffres = new List<int>();
            private Random rnd = new Random();
            private StringBuilder sb = new StringBuilder();
            public Form2()
            {
                InitializeComponent();
            }
     
            private void btnListEntree_Click(object sender, EventArgs e)
            {
     
                for (int i = 0; i < 50; i++)
                {
                    chiffres.Add(rnd.Next(100,201));
                }
     
     
                textBox1.Clear();
                foreach (var item in chiffres)
                {
                    sb.Append(item.ToString() + " ; ");
     
                }
                textBox1.Text = sb.ToString();
     
            }
     
            private void btnListSortie_Click(object sender, EventArgs e)
            {
     
     
                IEnumerable<int> queryIntervalle =
                    from c1 in chiffres
                    from c2 in chiffres
                    where chiffres.IndexOf(c2) == chiffres.IndexOf(c1) + 1
                    let s = c2 - c1
                    select s;
     
                //store le list pour usage ulterieur
                List<int> result = queryIntervalle.ToList();
     
                textBox2.Clear();
                sb.Clear();
     
                foreach (var item in result)
                {
                    sb.Append(item.ToString() + " ; ");
                }
                textBox2.Text = sb.ToString();
     
            }
        }
    }
    bon code...

Discussions similaires

  1. Calcul des combinaisons entre 2 listes
    Par Anthares dans le forum C#
    Réponses: 16
    Dernier message: 11/02/2011, 08h55
  2. Calcule de valeurs entre listes
    Par lesanglier dans le forum SharePoint
    Réponses: 3
    Dernier message: 20/11/2009, 08h29
  3. [XL-2007] Calcul d'interval entre deux apparitions de valeur
    Par Jimy6000 dans le forum Excel
    Réponses: 4
    Dernier message: 14/05/2009, 12h35
  4. calculer une liste de chiffres
    Par Ohemeg dans le forum Shell et commandes GNU
    Réponses: 17
    Dernier message: 21/11/2008, 11h55
  5. Calculer une duree entre 2 dates
    Par d.w.d dans le forum C++
    Réponses: 7
    Dernier message: 02/03/2005, 22h39

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