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():求平均值