前端之家收集整理的这篇文章主要介绍了
C#/ Linq获取相邻的集合,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_
404_0@
我有一个有序列表,如
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})会得到您需要的结果.