求如何通过LINQ获取整数列表中各连续数列中第一元素与个数表
如有:List<int> ints=new List<int>{10,100,101,102,150,300,301};
通过LINQ方法查询,而得到结果如:{100,2},{300,1}
意为在ints整数列表中,以元素100为首的连续数有2个,即101和102;以元素300为首的连续数有1个,即301.
[解决办法]
这个用Aggregate即可实现:
http://blog.csdn.net/q107770540/article/details/6625243
[解决办法]
好像需求不是很明确的样子。
[解决办法]
[解决办法]
- C# code
void Main(){ List<int> ints=new List<int>{10,100,101,102,150,300,301}; var list=ints.OrderBy(i=>i).ToList(); var temp=new List<List<int>>(); var query=list.Aggregate((m,n)=> { if(temp.Count()>0) { if(temp.Last().Last()==n-1) { temp.Last().Add(n); } else if(m==n-1) { temp.Add(new List<int>{m,n}); } } else { if(m==n-1) { temp.Add(new List<int>{m,n}); } } return n; } ); var result=from t in temp select new {Key=t.First(),Count=t.Count()-1}; result.ToList().ForEach(r=>Console.WriteLine("{0}\t{1}",r.Key,r.Count)); /* 100 2 300 1 */}
[解决办法]
- C# code
var list1 = new List<int>(); int temp = 0; var query = intss.Select(ints => { list1 = new List<int>(); ints.Aggregate((s, n) => { if ((s + 1) == n) { if (temp == 0) temp = s; list1.Add(temp); } else { temp = 0; } return n; }); return list1.GroupBy(g => g).Select(s => new { key = s.Key, count = s.Count() }); }); foreach (var item in query) Console.WriteLine(string.Join("", item.Select(s => string.Format("[{0},{1}]", s.key, s.count)).ToArray()));