读书人

求怎么通过LINQ获取整数列表中各连续数

发布时间: 2012-04-04 16:38:51 作者: rapoo

求如何通过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())); 

读书人网 >.NET

热点推荐