Range numbers into comma separated string
public static string CompactNumberRange(IEnumerable<int> range)
{
var sorted = range.OrderBy(x => x);
var output = new StringBuilder();
using (var enumerator = sorted.GetEnumerator())
{
if (!enumerator.MoveNext())
return "";
var current = enumerator.Current;
var count = 1;
output.Append(current);
while (enumerator.MoveNext())
{
var previous = current;
current = enumerator.Current;
if (current - previous == 1)
{
count++;
}
else
{
var format = count >= 3 ? "-{0}, {1}" : ", {0}, {1}, ";
output.AppendFormat(format, previous, current);
count = 1;
}
}
if (count > 1)
output.Append(current);
}
return output.ToString();
}