这个问题与这个问题几乎完全相反: C#是否具有解析页面编号字符串的内置支持?
所以考虑到
1,3,5,6,7,8,9,10,12:
我将输出:
1,3,5-10,12
这是我的第一次尝试。看起来有点笨拙,可能是我编写过的最差的代码。你能建议一种更好的方式来做吗?
static string numListToRangeStr(List<int> numList)
{
StringBuilder retString = new StringBuilder();
numList.Sort();
bool inRangeFind = false;
int firstInRange = numList[0];
int lastNumber = firstInRange;
bool first = true;
for (int i = 1; i < numList.Count; i++)
{
if (numList[i] == (lastNumber + 1))
{
inRangeFind = true;
}
else
{
if (inRangeFind)
{
if (!first)
{
retString.Append(",");
}
retString.Append(firstInRange);
retString.Append("-");
}
else
{
if (!first)
{
retString.Append(",");
}
}
retString.Append(lastNumber);
firstInRange = numList[i];
inRangeFind = false;
first = false;
}
lastNumber = numList[i];
}
if (inRangeFind)
{
if (!first)
{
retString.Append(",");
}
retString.Append(firstInRange);
retString.Append("-");
}
else
{
if (!first)
{
retString.Append(",");
}
}
retString.Append(lastNumber);
return retString.ToString();
}