首页 > IT职业 > IT生活 > 巧用javascript和c#查找不连号号的号码
业务背景:
航空货运系统中,“货运代理商”会定期从“航空公司”领取一定数量的纸质运单(每张纸上有一个单号),这些单号都是连续的(即:每次可以理解为领取一个“号段”),而且每张单子都要向航空公司交纳一定的费用(即:单号是有价的资产)。
实际使用中,货运代理商希望下级的各营业点连续把单号用完,如果出现未连续使用的情况(即:所谓的跳号),要求快速找出来,给予提醒,提示用户优先使用跳号的运单。(否则这些运单号,一直可能不被注意到,造成浪费,而且每到期末跟航空公司对账时,也对不清楚)
思路:
A:
一个号段的号码,抽象成一个数组;每个号码的使用状态,也抽象成一个等长的数组(Y表示已使用,N表示未使用)
这样使用状态就可形成 类似 "YYYYNNYYNYNNN" 的字符串,只找正则表达式找到 "N...Y"的位置,即为跳号的位置(即:下标值),根据该位置,即可方便取出跳号的号码
B:
如果不使用正则表达式,直接双重循环,也可以查找到,若某一个元素为“N”,在它后面还有"Y",则表示该元素“被跳号”了
1 html> 2 3 4find SKip Number 5 6 7 8 70 71
C#的实现:
1 static String[] findSkipNumberA(Regex reg, String[] awbNos, String awbStatus)
2 {
3 //Regex reg = new Regex("N+Y", RegexOptions.Compiled);
4 List result = new List();
5
6 MatchCollection matchs = reg.Matches(awbStatus);
7
8 int findStartIndex = 0;
9 foreach (Match m in matchs)
10 {
11 String matchValue = m.Groups[0].Value;
12 findStartIndex = awbStatus.IndexOf(matchValue, (findStartIndex > 0 ? findStartIndex + 1 : 0));
13 for (int i = 0; i result = new List();
27 for (int i = 0; i
c#版实际测试下来,如果数组较大(>200),正则表达式方式优势明显;数组较小于时,手动双重循环更快
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4442/viewspace-2800426/ ,如需转载,请注明出处,否则将追究法律责任。