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. linux 监控系统剩余内存大小

    cur_free = `free -m | awk '/buffers\// {print $NF}'` chars="current memory is $cur_free." ...

  2. 【Oracle】Oracle数据库DATABASE LINK 的命名

    当前数据库的GLOBAL_NAMES参数设置为 TRUE,使用DATABASE LINK 时,DATABASE LINK的名称必须与被连接库的 GLOBAL_NAME一致. 而要建多个 DBLINK到 ...

  3. Programming Entity Framework-dbContext 学习笔记第五章

    ### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...

  4. H264码流中SPS PPS详解<转>

    转载地址:https://zhuanlan.zhihu.com/p/27896239 1 SPS和PPS从何处而来? 2 SPS和PPS中的每个参数起什么作用? 3 如何解析SDP中包含的H.264的 ...

  5. js将秒转换为 分:秒 函数

    /** * 将秒转换为 分:秒 * s int 秒数 */ function s_to_hs(s){ //计算分钟 //算法:将秒数除以60,然后下舍入,既得到分钟数 var h; h = Math. ...

  6. unity2017.1.0f3与旧的粒子系统不兼容

    在测试旧版本插件unistorm时用unity2017.1.0f3打开后其它天气效果显示正常,雨点看不到,再用unity5.52打开后,所有效果都可以看到了. 记录备忘

  7. 如何有效地学习《空中英语教室》&《彭蒙惠英语》

    读者定位: <大家说英语>是学习美式口语入门书,内容全部是情境会话,定位为“初级美式生活会话”. <空中英语教室>以浅显英语提供从新闻.旅游到时尚等流行话题,丰富会话材料,定位 ...

  8. Page directive: illegal to have multiple occurrences of contentType with different values

    org.apache.jasper.JasperException: /commons/meta.jsp(1,1) PWC5988: Page directive: illegal to have m ...

  9. 解决编译错误 implicit declaration of function 'strptime'

    根据man手册,在文件中加上以下定义,应该可以去处该warning        #define _XOPEN_SOURCE /* glibc2 needs this */        #inclu ...

  10. Elasticsearch-PHP 快速开始

    快速开始 本章节会给你一个客户端的主要功能(函数)是如何工作的快速概述. 安装 引入(包含)elasticsearch-php 在你的 composer.json 文件: { "requir ...