杨中科 .netcore Linq 。一前期准备知识

news2024/10/11 20:38:20

为什么要学Linq

一、为什么要学LINQ?

让数据处理变得简单:
统计一个字符串中每个字母出现的频率(忽略大小写),然后按照从高到低的顺序输出出现频率高于2次的单词和其出现的频率。

var items=s.Where(c =>char.lsLetter(c))//过滤非字母
.Select(c=>char.ToLower(c))//大写字母转换为小写
.GroupBy(c =>c)//根据字母进行分组
.Where(g=>g.Count()>2)//过滤掉出现次数<=2.O
.rderByDescending(g =>g.Count())//按次数排序
.Select(g=>new { char=g.Key,Count=g.Count()})

推演过程

委托→lambda→LINQ

IsOK(int i)
{
 	return i>3&&<10;
}

items.Where(lsOk);items.Where(i=>i>3&&<10);

(复习)委托

1、委托是可以指向方法的类型,调用委托变量时执行的就是变量指向的方法举例。

在这里插入图片描述
委托指向一个方法
在这里插入图片描述
运行结果
在这里插入图片描述

自定义委托声明时,返回值、参数类型、参数数量要与被委托的方法一致
在这里插入图片描述

调用
在这里插入图片描述
运行结果
在这里插入图片描述

2、.NET 中定义了泛型委托Action(无返回值)和Func(有返回值),所以一般不用自定义委托类型。举例。
Action
在这里插入图片描述

Func

在这里插入图片描述
使用Action指向F1()
在这里插入图片描述
运行结果
在这里插入图片描述
转到Action 的方法定义,发现就是没有参数,没有返回值的委托声明
在这里插入图片描述
使用Func<>有返回值委托 指向Add 方法
在这里插入图片描述
运行结果
在这里插入图片描述
转到方法定义
在这里插入图片描述

二、lambda 是怎么来的

委托变量不仅可以指向普通方法还可以指向匿名方法

第一节中,指向的都是有名字的方法(F1,F2 ,Add)

Func<int, int, string>f1= delegate
(int i1, int i2){return $"{i1}+{i2}={i1 + i2}";

string s = f1(1,2);

示例:

没有参数,没有返回值的匿名方法

在这里插入图片描述

运行结果
在这里插入图片描述

有参数、没有返回值的匿名方法

委托必须根据传入参数类型,声明泛型变量
在这里插入图片描述

运行结果
在这里插入图片描述

带参数、有返回值的匿名方法

在这里插入图片描述

运行结果
在这里插入图片描述

匿名方法可以写成lambda表达式

省略掉了delegate 加上了 =>

Func<int, int, string> f1 =(i1,i2)=>return {
$"{i1}+{i2}={i1 + i2}";
};

可以省略参数数据类型,因为编译能根据委托类型推断出参数的类型用=>引出来方法体。

示例:
在这里插入图片描述
运行结果
在这里插入图片描述

可以省略参数类型
在这里插入图片描述
运行结果
在这里插入图片描述

如果委托没有返回值,且方法体只有一行代码,可省略{}

Action<int, string> a1 =(age, name)=> 
Console.WriteLine($"年龄{age}姓名{name}");
a1(18, "yzk");

示例:
在这里插入图片描述
运行结果
在这里插入图片描述

如果=>之后的方法体中只有一行代码,且方法有返回值,那么可以省略方法体的{}以及return。

return和{}要同时去掉,否则编译器会报错

Func<int, int, string> f1 =(i1,i2)=>
$"{i1}+{i2}={i1 + i2}";

示例:
在这里插入图片描述

如果只有一个参数,参数的()可以省略。

Action<string> f1 = s => Console.WriteLine(s);
Func<int, bool> f2 = i => i > 5;

反推回去

示例:
在这里插入图片描述
运行结果
在这里插入图片描述
有返回值
在这里插入图片描述

三、解密Linq 方法的背后

LINQ中提供了很多集合的扩展方法,配合lambda能简化数据处理。

int[] nums = new int[] {3,99,88,77,7,8,9,66,15,7};
lEnumerable<int> items =nums.Where(i=>i>10);//usingSystem.Ling;

示例:

在这里插入图片描述
运行结果,打印数组中所有大于10的数
在这里插入图片描述
where方法会遍历集合中每个元素,对于每个元素都调用a=>a>10这个表达式,判断一下是否为true。如果为true,则把这个放到返回的集合中。
类似于where中 传入一个 匿名lambda方法
在这里插入图片描述

自定义Linq方法

1.不使用扩展方法

在这里插入图片描述
调用
在这里插入图片描述
运行结果
在这里插入图片描述

2.使用yeild方式

在这里插入图片描述

调用
在这里插入图片描述
运行结果
在这里插入图片描述

可以使用var让编译器的“类型推断’来简化类型的声明。
在LINQ中常用
C#的var和JavaScript的var不一样,仍然是强类型的。
(*)C#中的弱类型是dynamic。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2205793.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络安全】CVE-2024-46990: Directus环回IP过滤器绕过实现SSRF

未经许可,不得转载。 文章目录 背景漏洞详情受影响版本解决方案背景 Directus 是一款开源 CMS,提供强大的内容管理 API,使开发人员能够轻松创建自定义应用程序,凭借其灵活的数据模型和用户友好的界面备受欢迎。然而,Directus 存在一个漏洞,允许攻击者绕过默认的环回 IP …

55100-3H-02微型法兰安装霍尔效应传感器

55100-3H-02微型法兰安装霍尔效应传感器应用领域如&#xff1a;位置和极限感应、无刷换向、RPM测量、直流电机、流量计量、角度感应、磁编码器。 概述 55100微型法兰安装霍尔效应传感器&#xff0c;尺寸为25.5mmx 11.00m&#xff0c;高度仅为3.00mm&#xff0c;可选择数字或可…

生物制药洁净室:设计、施工及常见问题解决

生物制药洁净室的设计施工要点对于保障生产环境的洁净度至关重要。生物制药洁净室的建设不仅是为了符合行业标准&#xff0c;更是确保产品安全和质量的重要环节。生物制药洁净室设计与生物制药洁净室施工是相辅相成的&#xff0c;接下来&#xff0c;我们将深入探讨这两方面的关…

交易中心态管理和情绪控制是第一位

情绪是交易中常见的障碍&#xff0c;无论是负面情绪还是喜悦等正面情绪&#xff0c;都可能成为妨碍交易的关键因素。交易的核心在于保持客观理性&#xff0c;而情绪的起伏往往不经意间扰乱我们的思绪。因此&#xff0c;成功的交易员若想突破自我&#xff0c;首要任务便是克服情…

事件轮询机制

引出闭包案例 for(var i 0; i < 5; i) {setTimeout(function () {console.log(i); // &#xff1f;}); } console.log(a); // 结果是什么&#xff1a;&#xff1f; 2.事件轮询机制&#xff08;Event Loop&#xff09; 事件轮询&#xff08;Event Loop&#xff09;是一个…

调整ApplyItem的界面

调整ApplyItem的界面 前言 在上一集&#xff0c;我们就完成了一个clickItem的一个函数&#xff0c;继承SessionFriendItem并通过它添加不同的Item&#xff0c;并且我添加了它的枚举类。 在上一集的最后&#xff0c;我们提了一嘴&#xff0c;我们要修改ApplyItem的样式。 分…

Flink 04 | 窗口介绍 - 无界数据流的核心

窗口介绍 Flink中Windows&#xff08;窗口&#xff09;是处理无界数据流的核心。因为无界数据集是不断增长的&#xff0c;无法直接对整个数据集进行操作。窗口将数据流分成有限大小的Buckets&#xff0c;我们可以在这些Buckets上应用计算。本文档重点介绍如何在 Flink 中选择合…

三菱FX3UPLC机械原点回归- DSZR/ZRN指令

机械原点回归用指令的种类 产生正转脉冲或者反转脉冲后&#xff0c;增减当前值寄存器的内容。可编程控制器的定位指令&#xff0c;可编程控制器的电源0FF后&#xff0c;当前值寄存器清零&#xff0c;因此上电后&#xff0c;请务必使机械位置和当前值寄存器的位置相吻合…

10.模拟实现s

前面我们了解了string类的常用接口使用&#xff0c;那么现在就来模拟实现一下。 1.constructor string.h namespace Ro {class string{public:string(){}string(const char* str){}~string(){}private:char* _str;size_t _size;size_t _capacity;}; } 为了和库里面的string…

Jenkins+kubernetes流水线构建java项目

在传统的业务环境中&#xff0c;我们的应用部署或者更新都是采用手工的方式&#xff0c;但是在企业内部&#xff0c;应用架构一般都采用微服务&#xff0c;大部分项目都会对应几十个、上百甚至上千个微服务&#xff0c;并且还不仅仅只有一个项目&#xff0c;所以采用收工方式上…

godot帧同步-关于“显示与逻辑分离”

很多教程说帧同步的关键是“显示与逻辑分离”&#xff0c;但是又没有具体讲解&#xff0c;我起初也没有搞懂这句话的意思&#xff0c;就直接上手开发帧同步了。在开发的过程中&#xff0c;一下子就悟了&#xff0c;所以分享一下。 显示与逻辑未分离&#xff08;单机&#xff0…

嵌入式中单链表基本实现

第一:单链表基本原理 依次读入表L=(a0,.....,an-1)中每一元素ai(假设为整型),若ai≠结束符(-1),则为ai创建一结点,然后插入表尾,最后返回链表的头结点指针H。 第二:单链表具体实现方法 1:实现单链表的时候,需要先定义基本文件link.h #ifndef __LINKLIST_H__ #define…

考华为认证拼了命,怎么还是没工作啊

在当今竞争激烈的就业市场中&#xff0c;网络工程领域的发展备受关注。当你疯狂地在某 BOSS 或者某联等招聘平台上浏览时&#xff0c;你必然会惊讶地发现&#xff0c;华为认证已赫然成为网络方向至关重要的资格认证之一&#xff0c;频繁地出现在形形色色的岗位 JD 里。 这一现…

如何设置 GitLab 密码长度?

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 60天专业…

【RabbitMQ——消息应答机制——分布式事务解决方式】

1. RabbitMQ高级-消息确认机制的配置 NONE值是禁用发布确认模式&#xff0c;是默认值 CORRELATED值是发布消息成功到交换器后会触发回调方法&#xff0c;如1示例SIMPLE值经测试有两种效果&#xff0c;其一效果和CORRELATED值一样会触发回调方法&#xff0c;其二在发布消息成功…

UE5 TimeLine入门

UE5 TimeLine入门 时间轴曲线 共计三个关键帧&#xff08;0,0&#xff09;(1.5,10) (3,0) 蓝图 1.按下空格键执行。 2.时间轴TimeLine函数。 3.动画播放结束后执行。 4.每一帧都执行。

GR-ConvNet论文 学习笔记

GR-ConvNet 文章目录 GR-ConvNet前言一、引言二、相关研究三、问题阐述四、方法A.推理模块B.控制模块C.模型结构D.训练方法E.损失函数 五、评估A.数据集B.抓取评判标准 六、实验A.设置B.家庭测试物体C.对抗性测试物体D.混合物体 七、结果A.康奈尔数据集B.Jacquard数据集C.抓取新…

Java—继承性与多态性

目录 一、this关键字 1. 理解this 2. this练习 二、继承性 2.1 继承性的理解 2.1.1 多层继承 2.2 继承性的使用练习 2.2.1 练习1 2.2.2 练习2 2.3 方法的重写 2.4 super关键字 2.4.1 子类对象实例化 三、多态性 3.1 多态性的理解 3.2 向下转型与多态练习 四、Ob…

使用node.js控制CMD命令——修改本机IP地址

设置每次打开cmd命令行窗口都是以管理员身份运行&#xff1a; 1. 按下Ctrl Shift Esc键组合&#xff0c;打开任务管理器。 2. 在任务管理器中&#xff0c;点击“文件”菜单&#xff0c;选择“运行新任务”。 3. 在“创建新任务”对话框中&#xff0c;输入cmd&#xff0c;勾…

无人机之信息管理系统篇

一、系统概述 无人机信息管理系统通过整合软件和硬件设备&#xff0c;实现对无人机的全面监控、管理、调度和数据分析。它能够帮助用户实时掌握无人机的飞行状态、位置信息等重要数据&#xff0c;确保飞行安全和隐私保护。 二、系统组成 无人机信息管理系统通常由以下几个关键…