Linq扩展最后遗留之SelectMany,Zip,SequenceEqual源码分析

一: AsParallel 【并行化查询】

这个函数的功效就是将计算结果多线程化。【并行计算】 =>【多核】

二:AsQueryable 【将lambda表达式作为数据结构存储起来,Expresstion 表达式树】

三:Join

多表关联操作,我们可以用”查询关键字“解决。

为了更加的脱俗易懂,我们建议用人性化的”查询关键字“来解决这个复杂的Join,lambda。

四:SelectMany

1.解释: 将序列的每个元素投影到 System.Collections.Generic.IEnumerable`1 并将结果序列合并为一个序列。

这个SelectMany我们在实际使用中还是用的比较多的。因为有一个【合并】的功能。

static void Main(string[] args)
{
var dic = new Dictionary<int, List<int>>();

dic.Add(1, new List<int>() { 10, 20, 30, 40 });

dic.Add(2, new List<int>() { 100, 200, 300, 400 });

//我有一个需求,就是将 key=1的List 和 key=2的List进行合并。
var query = dic.SelectMany(i => i.Value);
}

五:SequenceEqual

1.解释: 通过使用相应类型的默认相等比较器对序列的元素进行比较,以确定两个序列是否相等。

两个集合中的元素是逐一进行比较的。

static void Main(string[] args)
{
var num1 = new List<int>() { 10, 20, 30, 40 };

var num2 = new List<int>() { 10, 20, 30, 40 };

var query = num1.SequenceEqual(num2);
}

六: Zip

1. 解释: 将指定函数应用于两个序列的对应元素,以生成结果序列。

从代码解释上来看,我SequenceEqual还是有一点相似。

static void Main(string[] args)
{
var num1 = new List<int>() { 10, 20, 30, 40 };

var num2 = new List<int>() { 10, 20, 30, 40 };

//我现在的需求就是想把两个序列中的元素进行相加操作
var query = num1.Zip(num2, (i, j) =>
{
return i - j;
});
}

2. 疑问:

如果说我们两个集合的元素不对应的话,会怎么样。。。

通过Zip的测试,如果两个集合的个数不行等,以最短的那个集合为标准。这个函数又叫做“拉链函数”。

3.源代码

我们看到,又是一个枚举类:<ZipIterator>d__60<, , > GetEnumertor 和 MoveNext。

Linq扩展最后遗留之SelectMany,Zip,SequenceEqual源码分析的更多相关文章

  1. Linq转换操作之OfType,Cast,AsEnumerable,ToLookup源码分析

    Linq转换操作之OfType,Cast,AsEnumerable,ToLookup源码分析 一:Tolookup 1. 从方法的注解上可以看到,ToLookup也是一个k,v的形式,那么问题来了,它 ...

  2. Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析

    Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析 一:Linq的聚合运算 1. 常见的聚合运算:Aggregate,Count, Sum, Distinct,Max, ...

  3. Linq生成操作之DefautIfEmpty,Empty,Range,Repeat源码分析

    Linq生成操作之DefautIfEmpty,Empty,Range,Repeat源码分析 Linq的四种生成运算 DefautIfEmpty,Empty,Range,Repeat 也就是给我们初始化 ...

  4. Linq基础操作之Select,Where,OrderBy,ThenBy源码分析

    Linq基础操作之Select,Where,OrderBy,ThenBy源码分析 二:Select 它是延迟执行.yield有得一拼,因为他们都是生成了一个枚举类. if (source is TSo ...

  5. Flask框架(三)—— 请求扩展、中间件、蓝图、session源码分析

    Flask框架(三)—— 请求扩展.中间件.蓝图.session源码分析 目录 请求扩展.中间件.蓝图.session源码分析 一.请求扩展 1.before_request 2.after_requ ...

  6. JUnit源码分析 - 扩展 - 自定义Rule

    JUnit Rule简述 Rule是JUnit 4.7之后新加入的特性,有点类似于拦截器,可以在测试类或测试方法执行前后添加额外的处理,本质上是对@BeforeClass, @AfterClass, ...

  7. Linq分组操作之GroupBy,GroupJoin扩展方法源码分析

    Linq分组操作之GroupBy,GroupJoin扩展方法源码分析 一. GroupBy 解释: 根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值. 查询表达式: var ...

  8. Linq集合操作之Intersect,Except,Union源码分析

    Linq集合操作之Intersect,Except,Union源码分析 linq的集合运算 常见的集合运算有哪些? 这三个扩展方法在我们实际使用中用的还是非常多的,而且这里还涉及到了“复杂度” 无算法 ...

  9. ABP源码分析十五:ABP中的实用扩展方法

    类名 扩展的类型 方法名 参数 作用 XmlNodeExtensions XmlNode GetAttributeValueOrNull attributeName Gets an   attribu ...

随机推荐

  1. 11_java之接口和多态

    01接口的概念 * A:接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来 ...

  2. C# 在根据窗体中的表格数据生成word文档时出错

    出错内容为:

  3. TThread 线程的例子

    TThread 线程的例子 D:\Documents\Embarcadero\Studio\14.0\Samples\CPP\RTL\Threads TThread类   该线程类可以完成大多数的线程 ...

  4. MySQL 执行 'use databases;' 时很慢

    问题描述: 就是这么个情况,登录数据库切换库时感觉很卡,需要等待几秒钟. 案例: shell > mysql -uroot -ppassword mysql> use databases; ...

  5. properties 中文乱码问题的解决

    在用properties处理配置信息时,发现有时出现中文乱码的问题,后经查资料得知是由于编码不一致引起的.于是解决之. [原理解释] 我们用 API操作properties文件,如果获取的属性值是中文 ...

  6. .net Core 2.0使用NLog

    最近研究了一下NLog的使用方式,简单的入了一下门. 实现的功能,对于不同的日志,进行不同的记录,分别有系统运行日志,和个人在程序中写的异常日志.发布之后放在了IIS上.进行查看日志的信息 参考了两篇 ...

  7. JAVA heap space 内存溢出

    3月28日开始使用JAVA调用SAP RFC后提示内存溢出 尝试增加set java_OPTS.....但仍然提示内存溢出 最终设置方法

  8. 高性能Web服务器Nginx的配置与部署研究(7)核心模块之主模块的非测试常用指令

    1. error_log 含义:指定存储错误日志的文件 语法:error_log <file> [debug|info|notice|warn|error|crit] 缺省:${prefi ...

  9. Java核心技术-接口、lambda表达式与内部类

    本章将主要介绍: 接口技术:主要用来描述类具有什么功能,而并不给出每个功能的具体实现.一个类可以实现一个或多个接口. lambda表达式:这是一种表示可以在将来的某个时间点执行的代码块的简洁方法. 内 ...

  10. Maven详解【面试+工作】 各种安装 没用

    1 Maven介绍1.1 项目开发中遇到的问题 1.都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行? 2.为什么在我的机器上可以正常打包,而配置管理员却打不出来? 3.项目组加入 ...