Lambda随笔

  刚刚开始学习lambda和linq,写一些笔记方便以后查阅

Lambda实际上是一个匿名函数它包含表达式和语句,经常用于委托或表达式目录树类型。所有lambda都是用lambda运算符      =>,这个运算符叫“goesto”,这个符号其实就相当于sqlserver中的as,和linq中的IN,就是改名字,lambda左边是输出参数(也可能没有),右边是表达式,或语句块,lambda表达式返回右边表达式的结果。

(input  paramenters) =>express   //这里只是改个名字 paramenters知识一个参数,一个输入参数可以不用加括号否则必须加括号,两个或多个输入参数可以用逗号隔开

例如:(X,Y) => x == y //此处用逗号将输入参数隔开

通常lambda表达式参数是可以变的,由编译器自动指定它的具体类型,但有时编译器也无法指定他的编译类型,这时我们就可以指定它的编译类型,即在参数之前添加数据类型

例如:(int x,string y) =>y.length>x

当lambda表达式没有输入参数时,要用空()代替

例如:()  =>amethod() //可以看出此处amethod()是一个方法,这个方法返回值就是lambda表达式的结果。

由于lambda表达式是匿名函数,它可以赋值到一个委托,而在IEnumerable<T>(接口,多用于过滤)很多都通过函数,委托来实现自定义的运算,条件等操作,所以lambda在linq中被广泛使用。

常用的实例:

using System;
using System.Linq;

namespace ConsoleApplication3
{
    class Program
    {
         static void Main(string[] args)
        {
            int[] intary = { 1,  2, 3, 4, 5, 6, 7, 8, 89, 10 };
            //查询所有能被2整除的元素
            var  query1 = intary.Where(num => num % 2 == 0);
             Console.WriteLine("Query1:");
            foreach (var item in  query1)
            {
                Console.WriteLine("{0}",  item);
            }

            //查询所有值大于3被索引的元素
            var query2 = intary.Where((num,  index) => num > index * 3);
             Console.WriteLine("Query2:");
            foreach (var item in  query2)
            {
                Console.WriteLine("{0}",  item);
            }
        }
    }
}

query1显示 // 246810
query2显示//1 81

using System;
using System.Linq;

namespace ConsoleApplication3
{
    class Program
    {
         static void Main(string[] args)
        {
            int[] intary = { 1,  2, 3, 4, 5, 6, 7, 8, 89, 10 };
             //对所有元素按照%10进行升序排列,这是默认的排序方式
            var query1 = intary.OrderBy(val  => val % 10 );
            Console.WriteLine("Query1:");
             foreach (var item in query1)
            {
                 Console.WriteLine("{0}", item);//输出query1
            }

            //对所有元素按照%10进行降序排列
            var query2 =  intary.OrderByDescending(val => val % 10);
             Console.WriteLine("Query2:");
            foreach (var item in  query2)
            {
                Console.WriteLine("{0}",  item);
            }
        }
    }
}

 显示结构

query1:10 1 2 3 4 5 6 7 8 89

query2:89 8 7 6 5 4 3 2 1  10

 

using System;
using System.Linq;
using System.Collections.Generic;

namespace ConsoleApplication3
{
    class Program
    {
         static void Main(string[] args)
        {
            int[] intary = { 1,  2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 40 };
             //取intAry中前3个元素
            var query1 = intary.Take(3);
             Console.WriteLine("Query1");
            foreach (var item in  query1)
            {
                Console.WriteLine("{0}",  item);
            }

            //取intAry中小于5的元素
            var query2 = intary.TakeWhile(num  => num < 5);
            Console.WriteLine("Query2");
             foreach (var item in query2)
            {
                 Console.WriteLine("{0}", item);
            }
        }
     }
}

 显示结果

query1:1 2 3

query2: 1 2 3 4

 

  • Min():求最小值
  • Max():求最大值
  • Sum():求和
  • Average():求平均值

 

posted @ 2015-03-24 14:31  三撮毛  Views(140)  Comments(0Edit  收藏  举报