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
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.
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 .
Code : Sélectionner tout - Visualiser dans une fenêtre à part taListe[0]
Pour Linq , je ne suis pas assez à l'aise pour en parler
throw new NoSignatureException();
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 .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 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(); } } }
bon code...
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(); } } }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager