Linq扩展最后遗留之SelectMany,Zip,SequenceEqual源码分析
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源码分析的更多相关文章
- Linq转换操作之OfType,Cast,AsEnumerable,ToLookup源码分析
Linq转换操作之OfType,Cast,AsEnumerable,ToLookup源码分析 一:Tolookup 1. 从方法的注解上可以看到,ToLookup也是一个k,v的形式,那么问题来了,它 ...
- Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析
Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析 一:Linq的聚合运算 1. 常见的聚合运算:Aggregate,Count, Sum, Distinct,Max, ...
- Linq生成操作之DefautIfEmpty,Empty,Range,Repeat源码分析
Linq生成操作之DefautIfEmpty,Empty,Range,Repeat源码分析 Linq的四种生成运算 DefautIfEmpty,Empty,Range,Repeat 也就是给我们初始化 ...
- Linq基础操作之Select,Where,OrderBy,ThenBy源码分析
Linq基础操作之Select,Where,OrderBy,ThenBy源码分析 二:Select 它是延迟执行.yield有得一拼,因为他们都是生成了一个枚举类. if (source is TSo ...
- Flask框架(三)—— 请求扩展、中间件、蓝图、session源码分析
Flask框架(三)—— 请求扩展.中间件.蓝图.session源码分析 目录 请求扩展.中间件.蓝图.session源码分析 一.请求扩展 1.before_request 2.after_requ ...
- JUnit源码分析 - 扩展 - 自定义Rule
JUnit Rule简述 Rule是JUnit 4.7之后新加入的特性,有点类似于拦截器,可以在测试类或测试方法执行前后添加额外的处理,本质上是对@BeforeClass, @AfterClass, ...
- Linq分组操作之GroupBy,GroupJoin扩展方法源码分析
Linq分组操作之GroupBy,GroupJoin扩展方法源码分析 一. GroupBy 解释: 根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值. 查询表达式: var ...
- Linq集合操作之Intersect,Except,Union源码分析
Linq集合操作之Intersect,Except,Union源码分析 linq的集合运算 常见的集合运算有哪些? 这三个扩展方法在我们实际使用中用的还是非常多的,而且这里还涉及到了“复杂度” 无算法 ...
- ABP源码分析十五:ABP中的实用扩展方法
类名 扩展的类型 方法名 参数 作用 XmlNodeExtensions XmlNode GetAttributeValueOrNull attributeName Gets an attribu ...
随机推荐
- springcloud (一) 介绍
开启springcloud 之旅... 传统单体架构: 微服务架构: 每个模块独立运行,就是独立的进程. 接下来基于springboot 来构建微服务: 1, 客户端->订单微服务->用户 ...
- 关于Python安装官方whl包和tar.gz包的方法详解
Windows环境: 安装whl包:pip install wheel -> pip install **.whl 安装tar.gz包:cd到解压后路径,python setup.py inst ...
- Python 小知识点(10)--异常结构记录
try: print("try中") except KeyError as e: # 异常时,执行该块 print("异常中") else: # 主代码块(tr ...
- Java语言主要特点有哪些?
1.简单 Java最初是为对家用电器进行集成控制而设计的一种语言,因此它必须简单明了.Java语言的简单性主要体现在以下三个方面: 1) Java的风格类似于C++,因而C++程序员是非常熟悉的.从某 ...
- awk 数据处理小技巧
进行数据分析或统计时,如果数据量较小,我们可以用awk快速处理,以下是一些小技巧 一.时间戳转换 日期转时间戳: date -d "20150315" "+%s&q ...
- mysql数据库怎么安装到自己的电脑上?
安装mysql1.安装过程中输⼊入Y确认继续安装 2.设置密码1.第⼀一次设登陆密码 2.第⼆二次验证密码 安装完成
- Sqoop 1.99.6 安装和使用
安装 1.安装准备工作: 下载的sqoop安装包 http://mirrors.hust.edu.cn/apache/sqoop/1.99.6/sqoop-1.99.6.tar.gz ...
- 高性能Web服务器Nginx的配置与部署研究(6)核心模块之主模块的测试常用指令
1. daemon 含义:设置是否以守护进程模式运行 语法:daemon on|off 缺省:on 示例:daemon off; 注意:生产环境(production mode)中不要使用daemon ...
- 112. Path Sum (Tree; DFS)
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...
- if UNITY_EDITOR这个判断常用,还有哪个常用捏?
#if DEVELOPMENT_BUILD || UNITY_EDITOR DEVELOPMENT_BUILD表示开发版的意思,会在程序右下角显示 Development Build 我们可以根据这个 ...