名词解释
断号:比如,连续生成的编号,由于某种操作(通常为删除)后,产生不连续的编号,我们将这种不连续的编号称为断号。
例如,数据库中有一个字段叫合同编号,正常格式为201106_011(表示2011年6月的第11个合同),那么它前面的一个合同编号应该为201106_10,后面的一个应该为201106_12,当我们删除了合同201106_011,就会出现201106_010后面直接是201106_012,这种情况下叫做断号。
传统系统中,像这种断号的情况很常见,比如数据库中的列为递增类型,当删除某行后,就会出现断号,而经常有客户提出需求,不希望出现断号的情况。解决方案通常就是,如果删除了某行数据,那么下次新增时,应该将断号补齐。
问题很简单,解决方法也很简单:
写一个C#方法,用来获取下一条记录的编号:
- public static int GetNextNumber(int[] iNumList)
- {
- int iTempStr = iNumList[0];
- for (var i = 0; i < iNumList.Length - 1; i++)
- {
- if (i == 0)
- {
- iTempStr = iNumList[i];
- }
-
- if ((iNumList[i] - iTempStr) > 1)
- {
- return iTempStr + 1;
- }
- else
- {
- iTempStr = iNumList[i];
- }
- continue;
- }
- return iNumList[iNumList.Length - 1] + 1;
- }
|
当然,这段代码也可以简写为以下形式:
- public static int GetNextNumber3(int[] iNumList)
- {
- for (int i = 0, j = 1; j < iNumList.Length - 1; i++, j++)
- {
-
- if ((iNumList[j] - iNumList[i]) > 1)
- {
- return iNumList[i] + 1;
- }
- }
- return iNumList[iNumList.Length - 1] + 1;
- }
|
测试代码如下:
- static void Main(string[] args)
- {
- int[] iNums = { 1, 2, 4, 5, 6, 9, 10 };
- System.Console.WriteLine(BreakNumber.GetNextNumber3(iNums));
- System.Console.WriteLine(BreakNumber.GetNextNumber(iNums));
- }
|
运行结果如下: