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. 来谈谈 WebAssembly 是个啥?为何说它会影响每一个 Web 开发者?

    作者:link 原文:What is WebAssembly and why it affects web developers! 你听说过WebAssembly吗?这是由Google, Micros ...

  2. F5负载均衡架构图

    原文:https://blog.csdn.net/qq_35611533/article/details/51917279?locationNum=1&fps=1

  3. Lists、Sets、Maps和Collections2的使用

    1.Lists //Lists System.out.println("### Lists ###"); ArrayList<String> arrayList = L ...

  4. [JS] 让人犯晕的JavaScript变量赋值

    变量赋值 本文转载自http://hellobug.github.io/blog/javascript-variable-assignment/ 开始之前先来几个例子,确保起始点是晕的状态- :P 例 ...

  5. 复制新增树状数据_ParentID也需要更新

    CREATE TABLE TreeShip(  [ID] uniqueidentifier PRIMARY KEY NOT NULL,  [Name] [nvarchar](50) NULL,  [R ...

  6. 获取web.xml配置文件中的初始化值

    TestServletConfig.java package com.huawei.config; import java.io.IOException;import java.util.Enumer ...

  7. java.lang.NoSuchMethodError: org.springframework.dao.IncorrectResultSizeDataAccessException

    spring data jpa  运用,在dao类中写自己新增的方法,使用@query写hql语句,出现以下异常: Caused by: java.lang.NoSuchMethodError: or ...

  8. Lamber算法 & SurfaceShader自定义光照

    [SurfaceShader自定义光照] 1.在pragma中添加自定义光照函数名:  #pragma surface surf BasicDiffuse 2.实现自定义光照函数.下面就是Lamber ...

  9. Slim安装以及使用【转】

    最近在用backbone.js 做东西,因为牵扯到REST services 所以需要后台支持,此处选择了php.Slim 是php的一个框架. 貌似国内文章对此的介绍比较少,在安装Slim的过程中出 ...

  10. 79. Word Search在字母矩阵中查找单词

    [抄题]: Given a 2D board and a word, find if the word exists in the grid. The word can be constructed ...