LINQ Aggregate聚合学习

前端之家收集整理的这篇文章主要介绍了LINQ Aggregate聚合学习前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var num = Enumerable.Range(1,5); //start,count
            foreach (var n in num)
                Console.WriteLine(n.ToString() + ",");
            Console.WriteLine("=========================");

            string[] arr = { "jon","tom","lucy","kitty","jim" };
            var q = arr.Aggregate((current,next) => string.Format("{0}、{1}",current,next));
            Console.WriteLine(q);
            Console.WriteLine("=========================");

            var query = Enumerable.Repeat(arr,3); //重复值的集合
            foreach (var item in query)
                Console.WriteLine(item.Aggregate((y,x) => string.Format("{0},{1}",y,x)));
            Console.WriteLine("=========================");

            var result = num.Aggregate((total,next) => total * next);
            Console.WriteLine(string.Format("5的阶乘为:{0}",result)); //也就是1*2*3*4*5
            Console.WriteLine("=========================");

            //依次减去序列中的项
            int BaseC = 20;
            var r = num.Aggregate(BaseC,(current,next) => next <= current ? current - next : current);
            Console.WriteLine("20依次减去{1,2,3,4,5}序列的项,结果是:" + r.ToString());
            Console.WriteLine("=========================");

            kk();
            Console.ReadKey();
        }

        static void kk()
        {
            var list = new List<temp>  
            {  
             new temp{ A=1,B=1,C="a"},new temp{ A=1,B=2,B=3,B=4,C="b"},B=5,new temp{ A=2,B=6,B=7,B=8,C="b"}  
            };
            var result = new List<temp>();
            var query = list.Aggregate((m,n) =>
            {
                //m=>current(默认第一个),n=>next
                if (m.A == n.A && m.C == n.C)
                {
                    if (m.B == n.B - 1)
                    {
                        result.Add(m);
                        result.Add(n);
                        return n;
                    }
                    else
                    {
                        return m;
                    }
                }
                else
                {
                    return n;
                }
            });
            Console.WriteLine("A\tB\tC");
            result.Distinct().ToList().ForEach(r => Console.WriteLine("{0}\t{1}\t{2}",r.A,r.B,r.C));
        }
    }

    class temp
    {
        public int A { get; set; }
        public int B { get; set; }
        public string C { get; set; }
    }

}
结果如下:

 static void jj()
        {
            System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
            stopwatch.Start(); //  开始监视代码运行时间
            string[] arr = { "jon","jim" };
            var query = Enumerable.Repeat(arr,3000); //重复值的集合
            foreach (var item in query)
                //Console.WriteLine(string.Join("、",item));
                Console.WriteLine(item.Aggregate((current,next)));
            stopwatch.Stop(); //  停止监视

            TimeSpan timespan = stopwatch.Elapsed; //  获取当前实例测量得出的总时间
            Console.WriteLine("运行{0}秒",timespan.TotalSeconds);
        }

int[] num = { 1,5,6 };
            int BaseC = 20;
            //保障不为负数
            //var r = num.Aggregate(BaseC,next) => next <= current ? current - next : current);
            //Func<int,int,int> fn = (x,y) => x - y;
            //var r = num.Aggregate(BaseC,fn);
            var r = num.Aggregate(BaseC,next) =>
            {
                Console.WriteLine("current:{0},next:{1}",next);
                /*
                 current:20,next:1
                 current:19,next:2
                 current:17,next:3
                 current:14,next:4
                 current:10,next:5
                 current:5,next:6
                 */
                return current - next;
            });

            Console.WriteLine("20依次减去{1,6}序列的项,结果是:" + r.ToString());
            Console.WriteLine("=========================");

猜你在找的设计模式相关文章