LINQ入门示例

入门示例:

//demo1
// even ,>=4
// then sort
var list = new List<int> {1,3,5,7,9,2,4,6,8,0};
//1.Imperative programmming
var res1=new List<int>();
foreach(var a in list)
{
    if(a%2==0&&a>=4)
    {
        res1.Add(a);
    }
}
res1.Sort();
res1.Dump();

//2.query expression
var res2=
    from a in list
    where a%2==0 && a>=4
    orderby a
    select a;

res2.Dump();    

//3. chained expression
var res3=list.Where(a=>a%2==0 &&a>=4).OrderBy(a=>a);
res3.Dump();


//demo2 求交集
var arr1 = new int[] { 1, 2, 3, 4, 5, 6 };
var arr2 = new int[] { 4, 5, 6, 7, 8, 9 };

//1.Imperative programming
var res1 = new List<int>();
foreach (var a in arr1)
{
    if (arr2.Contains(a))
    {
        res1.Add(a);
    }
}
res1.Dump();

//2. query expression
var res2=
    from a in arr1
    where arr2.Contains(a)
    select a;
res2.Dump();

//3. chained expression
var res3=arr1.Intersect(arr2);
res3.Dump();
//demo3 分组
var rnd=new Random(1334);
var arr=Enumerable.Range(0,200).Select(_=>rnd.Next(20));

//1. Imperative Programming
var dic=new Dictionary<int,int>();
foreach(var n in arr)
{
    if(dic.TryGetValue(n,out int count))
        dic[n]=count+1;
    else
        dic[n]=1;
}
dic.Dump();

//2. query expression
var res2=
    from a in arr
    group a by a into b
    orderby b.Key
    select new {b.Key,Count=b.Count()};
res2.Dump();    
    
    
//3. chained expression
var res3=
    arr.GroupBy(a=>a).OrderBy(b=>b.Key) 
    .Select(b=>new{b.Key,Count=b.Count()});
res3.Dump();
//demo4 ParallelQuery
var arr=Enumerable
    .Range(1,10)
    .ToArray()
    .AsParallel()
    .AsOrdered()
    .Select(x => 
    {
        Thread.Sleep(500);
        return x*x;
    })
    .AsSequential();
arr.Dump();

实战示例:

//展平
var mat = new int[][] {
    new[]{1,2,3,4},
    new[]{5,6,7,8},
    new[]{9,10,11,12}
};

//1.query expression
var res1=
    from row in mat
    from n in row
    select n;
res1.Dump();

//2.chained expression
var res2=
    mat.SelectMany(n=>n);
res2.Dump();
    
//笛卡儿积
for(int i=0;i<5;i++)
{
    for(int j=0;j<4;j++)
    {
        for(int k=0;k<3;k++)
        {
            $"{i},{j},{k}".Dump();
        }
    }
}

//query expression
var res1=
    from i in Enumerable.Range(0,5)
    from j in Enumerable.Range(0,4)
    from k in Enumerable.Range(0, 3)
    select $"{i},{j},{k}";
res.Dump(); 

//chained expression 
var res2=
    Enumerable.Range(0,5)
    .SelectMany(r => Enumerable.Range(0, 4), (l, r) => (l, r))
    .SelectMany(r => Enumerable.Range(0, 3),(l, r) => (l.l,l.r,r))
    .Select(x=>x.ToString());
res2.Dump();    

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容