刚开始学lambda,lambda与linq的联合使用。

Lambda表达式实际上是一个匿名函数。它包含表达式和语句,常用于创建委托或表达式目录树类型。所有Lambda表达式都是用Lambda运算符----------  =>,该运算符读为“goesto”。Lambda运算符的左边是输入参数(可能没有),右边是表达式或语句块。Lambda表达式返回右边表达式的结果。其基本格式如下:

(input paramenters)=>expression

其中,parameters是一个参数列表,在Lambda只有一个输入参数时可以不适用括号,否则括号是必须的。两个或更多输入参数由括在括号中的逗号分隔,如以下代码所示,包括两个参数x和y。

(x,y)=> x==y

通常Lambda表达式的参数都是可变类型的,由编译器自动确定它的具体类型。但有时编译器难于或无法推断输入类型,就需要为参数显示指定类型,既在参数之前添加参数类型。如下所示的Lambda表达式包括连个参数x和s。其中x是int类型,而s则是string类型。

(int x, string s) =>s.Length > x

当Lanbda表达式没有参数时,需要使用空的括号表示,如下所示。其中,“()”表示没有参数,而Amethod()是一个具体的方法,该方法的返回值就是Lambda表达式的结果。

() => AMethod()

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

常用实例:

1.用Where()方法进行筛选

using System;
using System.Linq; namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
int[] intary = { , , , , , , , , , };
//查询所有能被2整除的元素
var query1 = intary.Where(num => num % == );
Console.WriteLine("Query1:");
foreach (var item in query1)
{
Console.WriteLine("{0}", item);
} //查询所有值大于3被索引的元素
var query2 = intary.Where((num, index) => num > index * );
Console.WriteLine("Query2:");
foreach (var item in query2)
{
Console.WriteLine("{0}", item);
}
}
}
}

2.用OrderBy()方法进行排序

using System;
using System.Linq; namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
int[] intary = { , , , , , , , , , };
//对所有元素按照%10进行升序排列,这是默认的排序方式
var query1 = intary.OrderBy(val => val % );
Console.WriteLine("Query1:");
foreach (var item in query1)
{
Console.WriteLine("{0}", item);
} //对所有元素按照%10进行降序排列
var query2 = intary.OrderByDescending(val => val % );
Console.WriteLine("Query2:");
foreach (var item in query2)
{
Console.WriteLine("{0}", item);
}
}
}
}

以上的两个排序Demo都是采用默认的int排序比较器,在一些开发中,以下两种情况需要使用特定的数据比较器:

  • 默认的数据类型不能满足特殊的比较需要
  • 自定义的类不存在默认的数据比较器
using System;
using System.Linq;
using System.Collections.Generic; namespace ConsoleApplication3
{
//自定义int类型比较器,实现IComparable<int>接口
class MyCompare : IComparer<int>
{
public int Compare(int x, int y)
{
int x1 = Math.Abs(x);
int y1 = Math.Abs(y);
if (x1 > y1)
{
return ;
}
else if (x1 == y1)
{
return ;
}
else
{
return -;
}
}
} class Program
{
static void Main(string[] args)
{
//实例化自定义比较器
MyCompare mc = new MyCompare();
int[] intary = { , -, , -, , -, , -, , - };
var query1 = intary.OrderBy(val => val, mc);
Console.WriteLine("Query1");
foreach (var item in query1)
{
Console.WriteLine("{0}",item);
}
}
}
}

3.用Skip()、SkipWhile()跳过元素

using System;
using System.Linq;
using System.Collections.Generic; namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
int[] intary = { , , , , , , , , , , , , };
//跳过intAry中前3个元素
var query1 = intary.Skip();
Console.WriteLine("Query1");
foreach (var item in query1)
{
Console.WriteLine("{0}", item);
} //跳过intAry中小于5的元素
var query2 = intary.SkipWhile(num => num < );
Console.WriteLine("Query2");
foreach (var item in query2)
{
Console.WriteLine("{0}", item);
}
}
}
}

4.用Take()、TakeWhile()提取元素

using System;
using System.Linq;
using System.Collections.Generic; namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
int[] intary = { , , , , , , , , , , , , };
//取intAry中前3个元素
var query1 = intary.Take();
Console.WriteLine("Query1");
foreach (var item in query1)
{
Console.WriteLine("{0}", item);
} //取intAry中小于5的元素
var query2 = intary.TakeWhile(num => num < );
Console.WriteLine("Query2");
foreach (var item in query2)
{
Console.WriteLine("{0}", item);
}
}
}
}

5.对元素进行数值计算

  • Min():求最小值
  • Max():求最大值
  • Sum():求和
  • Average():求平均值
using System;
using System.Linq; namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
int[] intary = { , , , , , , , , , , , , };
var intMin = intary.Min();
var intMax = intary.Max();
var intSum = intary.Sum();
var intAverage = intary.Average();
Console.WriteLine("intary's min={0},max={1},sum={2},average={3}",intMin,intMax,intSum,intAverage); string[] strAry = { "Kevin", "James", "Ken", "Ben" };
var strMin = strAry.Min();
var strMax = strAry.Max();
Console.WriteLine("strAry's Min = {0},Max={1}",strMin,strMax);
}
}
}

6.用Distinct()消除集合中相等的元素

using System;
using System.Linq; namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
int[] intary = { ,, ,, , , , };
var query1 = intary.Distinct();
foreach (var item in query1)
{
Console.WriteLine(item);
}
}
}
}

7.用Concat()连接两个集合

using System;
using System.Linq; namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
string[] strAry1 = {"Kevin","James","Ben"};
string[] strAry2 = { "Ken","Joanna","cc"};
var query1 = strAry1.Concat(strAry2);
Console.WriteLine("Query1");
foreach (var item in query1)
{
Console.WriteLine(item);
} var query2 = strAry2.Concat(strAry1);
Console.WriteLine("Query2");
foreach (var item in query2)
{
Console.WriteLine(item);
}
}
}
}

注意:Concat()方法是直接将两个集合中的元素连接在一起,不会进行重新排序、过滤等,就算两个集合中元素有重复也同样保留。

8.集合操作

说到集合,很容易想起并集、交集、差集3种常用操作。在LINQ中,IEnumerable<T>类分别通过Union()、Intersect()、Except完成这3种操作()。

using System;
using System.Linq; namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
int[] intAry1 = {,,};
int[] intAry2 = {,,};
var query1 = intAry1.Union(intAry2);
Console.WriteLine("并集");
foreach (var item in query1)
{
Console.WriteLine(item);
} var query2 = intAry1.Intersect(intAry2);
Console.WriteLine("交集");
foreach (var item in query2)
{
Console.WriteLine(item);
}

Lambda表达式介绍(转)的更多相关文章

  1. Linq学习系列-----1.1 Lambda表达式介绍

     1.1  Lambda表达式介绍 下图就是一个典型的Lambda表达式. instance:输入参数 =>:Lambda操作符 instance.MemoryCount>=20*1024 ...

  2. c/c++ lambda 表达式 介绍

    lambda 表达式 介绍 问题:假设有个需求是,在vector<string>找出所有长度大于等于4的元素.标准库find_if函数的第三参数是函数指针,但是这个函数指针指向的函数只能接 ...

  3. Java8新特性: lambda 表达式介绍

    一.lambda 表达式介绍 lambda 表达式是 Java 8 的一个新特性,可以取代大部分的匿名内部类,简化了匿名委托的使用,让你让代码更加简洁,优雅. 比较官方的定义是这样的: lambda ...

  4. java语言中的匿名类与lambda表达式介绍与总结 (Anonymous Classes and Lambda Expressions)

    2017/6/30 转载写明出处:http://www.cnblogs.com/daren-lin/p/anonymous-classes-and-lambda-expressions-in-java ...

  5. Lambda表达式介绍

    Lambda表达式实际上是一个匿名函数.它包含表达式和语句,常用于创建委托或表达式目录树类型.所有Lambda表达式都是用Lambda运算符----------  =>,该运算符读为" ...

  6. Java 8 Lambda表达式介绍

    Lambda是什么? Lambda是一个匿名函数,我们可以把Lambda理解为是一段可以传递的代码.可以写出简洁.灵活的代码.作为一种更紧凑的代码风格,使java的语言表达能力得到提升. 可以这么说l ...

  7. JAVA 8 Lambda表达式-Lambda Expressions

    Lambda表达式介绍 Lambda表达式是在java规范提案JSR 335中定义的,Java 8 中引入了Lambda表达式,并被认为是Java 8最大的新特性,Lambda表达式促进了函数式编程, ...

  8. java8新增特性(一)---Lambda表达式

    Lambda表达式也成为闭包,是java语言层次上的改变,Lambda同意把函数作为一个方法的參数(函数作为參数传递进方法中),或者把代码看成数据.函数式程序猿对这一概念非常熟悉. 在JVM平台上有非 ...

  9. 一文搞懂Java8 Lambda表达式(附带视频教程)

    Lambda表达式介绍 Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁.通过Lambda表达式,可以替代我们以前经常写的匿名内部类来实现接口.Lambda表达式本质是一个 ...

随机推荐

  1. [20181105]再论12c set feedback only.txt

    [20181105]再论12c set feedback only.txt --//前一阵子的测试,链接:http://blog.itpub.net/267265/viewspace-2216290/ ...

  2. Cs231n课堂内容记录-Lecture2-Part2 线性分类

    Lecture 3 课程内容记录:(上)https://zhuanlan.zhihu.com/p/20918580?refer=intelligentunit (中)https://zhuanlan. ...

  3. VueJs入门(一)

    VueJs学习笔记:基本概念及简单demo Vue官方介绍:简单小巧的核心,渐进式技术栈,足以应付任何规模的应用. 简单小巧指的是vue.js压缩后仅有17KB,量轻.渐进式指的是我们学习和使用vue ...

  4. Win10家庭版-添加[组策略]

    win10家庭版有很多功能都不能用,这一次就碰到了一个找不到‘组策略’的问题,在网上搜索到了一个方法,记录一下: 新建一个txt,将下面内容复制到文本中: =====分隔符====== @echo o ...

  5. win10安装nodejs遇到提示错误代码2503怎么办

    我们在安装某个软件的时候,最闹心的就是遇到提示安装失败或错误,比如win10系统在安装nodejs遇到提示错误代码2503,遇见这个问题也不要慌张,今天小编就来告诉大家怎么解决这个问题. 1.打开智能 ...

  6. June 7. 2018 Week 23rd Thursday

    Half is worse than none at all. 一知半解比一无所知更痛苦. From Westworld. If we go looking for the truth, get th ...

  7. MATLAB常微分方程数值解——欧拉法、改进的欧拉法与四阶龙格库塔方法

    MATLAB常微分方程数值解 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.一阶常微分方程初值问题 2.欧拉法 3.改进的欧拉法 4.四阶龙格库塔 ...

  8. 在模态框(Modal)中使用UEditor全屏显示的一个坑

    根据这个问题很简单就能查到一些文章明确说明了解决问题的方法,就是如下一段代码: var isModal = false; //判断该dom是否为modal var classes = $(contai ...

  9. 「APIO2017」商旅

    「APIO2017」商旅 题目描述 在广阔的澳大利亚内陆地区长途跋涉后,你孤身一人带着一个背包来到了科巴.你被这个城市发达而美丽的市场所深深吸引,决定定居于此,做一个商人.科巴有 \(N\) 个集市, ...

  10. 【适合核显电脑的环境配置】Tensorflow教程-Windows 10下安装tensorflow CPU with Anaconda

    安装TensorFlow 1.5.0 CPU版本 :仅支持CPU的TensorFlow. 如果您的系统没有NVIDIA GPU,则必须安装此版本. 1.首先下载和安装Anaconda TensorFl ...