次の例では、連続する整数をグループ化し、グループごとに文字列を出力します。ただし、ハイフネーションするグループの最小の長さを指定することもできます。それ以下の場合は、個々の番号が表示されます。したがって、4 つ以上のグループのみをハイフネーションしたい場合は、4 を渡すことができます。ペアをハイフネーションしたい場合は、2 を渡すことができます。
また、必要がないため、進行中に数値のコレクションを保持しません。
方法:
static IEnumerable<string> Group(IEnumerable<int> input, int minLength)
{
int currentStart = int.MinValue;
int currentLength = 0;
foreach (int c in input)
{
if (currentLength > 0)
if (currentStart + currentLength == c)
currentLength++;
else
{
if (currentLength >= minLength)
yield return string.Format("{0}-{1}",
currentStart, currentStart + currentLength - 1);
else
for (int i = currentStart; i < currentStart + currentLength; i++)
yield return i.ToString();
currentStart = c;
currentLength = 1;
}
else
{
currentStart = c;
currentLength = 1;
}
}
if (currentLength >= minLength)
yield return string.Format("{0}-{1}",
currentStart, currentStart + currentLength + 1);
else
for (int i = currentStart; i < currentStart + currentLength; i++)
yield return i.ToString();
}
使用法:
int minCount = 3;
int[] input = new[] { 1, 2, 3, 4, 5, 6, 8, 10, 11 };
Console.WriteLine(String.Join(",", Group(input, minCount)));