我有一个有序列表,如
0,1,2,6,7,10
0,1,2,6,7,10
我想得到数字增加1的集合.
我想要第一个数字和计数或系列.
所以我会得到
start = 0,count = 3
start = 6,count = 2
start = 10,count = 1
我怎么能在C#中做到这一点?
答案是我觉得最好的方式.对我来说,可读性比性能更重要.
解决方法
定义一个简单的类来保存结果:
private class Set { public int Start = 0; public int Count = 0; }
你可以使用这样的方法:
private static IEnumerable<Set> GetSets(List<int> src) { List<Set> rtn = new List<Set>(); int prevIoUs = int.MaxValue; foreach (int i in src) { if (i == prevIoUs + 1) { rtn[rtn.Count - 1].Count += 1; } else { rtn.Add(new Set() { Start = i,Count = 1 }); } prevIoUs = i; } return rtn; }
我并不热衷于int.MaxValue的神奇价值,但它在第一次迭代时节省了额外的逻辑.
正确调用GetSet(新列表< int>(){0,10})会得到您需要的结果.