以下内容将一组连续整数分组,并为每个组输出一个字符串。但是,它还允许您指定要连字符化的最小组长度;任何长度小于此值的组都只会给您单独的数字。因此,如果您只想连字符化4个或更多的组,可以传入4;如果您想连字符化成对的数字,可以传入2。(我自己想使用3,但我无法确定他们想要什么。)
它在进行操作时也不会保留任何数字集合,因为您不需要这样做。
方法:
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)));
1,2,3
到1-3
为什么是错误的?我看不出这种情况有什么问题。 - Jarek1-3
是错的,因为你应该输出1-4
,还是说它是错的,因为他们只想要替换一行中的4个或更多元素,而不是3个元素。 - Rawling