Vieille école avec une boucle unique.
try
{
List<int> i = new List<int>() { 1, 2, 3, 5, 7, 8, 11, 13, 14 };
int istart = i[0];
bool flag = false;
// Use StringBuilder
for(int index = 0;index<i.Count-1;index++)
{
if ((i[index] + 1) == i[index + 1])
{
flag = true;
continue;
}
else
{
if (!flag)
Console.Write(istart);
else
Console.Write(istart + "-" + i[index]);
Console.Write(",");
flag = false;
istart = i[index + 1];
}
}
if (istart + 1 == i[i.Count - 1])
Console.Write(istart + "-" + i[i.Count - 1]);
else
Console.WriteLine(istart);
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.WriteLine();
Console.WriteLine("Done");
Console.Read();
entrée List<int> i = new List<int>() { 1, 2, 3, 5, 7, 8, 11, 13, 14 };
entrée List<int> i = new List<int>() { 1, 2, 3, 4, 5, 7, 8, 11, 13, 13 };
entrée List<int> i = new List<int>() { 1, 4, 5, 7, 8, 9, 2, 13, 15, 17 };
quelle est la logique pour générer plage? pourquoi pas 1-5, 3-8 etc? – Sajeetharan
_y at-il un moyen rapide/intelligent (linq?) _ - si par "rapide" vous voulez dire vitesse d'exécution, alors "foreach" sera toujours plus rapide que LINQ – Fabio