This question is pretty much the opposite of this question: Does C# have built-in support for parsing page-number strings?
So given
1,3,5,6,7,8,9,10
I know this is an old thread but thought I'd share my approach. This generates a list of ranges which can be easily converted to a single string.
var numbers = new List() { 1, 3, 5, 6, 7, 8, 9, 10, 12 };
var ranges = new List();
if (numbers.Count == 0)
return ranges;
numbers = numbers.Distinct().ToList();
numbers.Sort();
int start = numbers[0];
string range = start.ToString();
for (int i = 1; i <= numbers.Count; i++)
{
if (i < numbers.Count && numbers[i] == numbers[i - 1] + 1)
{
range = $"{start} - {numbers[i]}";
continue;
}
ranges.Add(range);
if (i < numbers.Count)
{
start = numbers[i];
range = start.ToString();
}
}
var rangeString = string.Join(", ", ranges); // Outputs: "1, 3, 5 - 10, 12"