首页 > 其他分享 >LINQ学习笔记

LINQ学习笔记

时间:2024-02-11 12:22:39浏览次数:22  
标签:Count arr res 笔记 学习 LINQ var new Select

查询表达式

var lst = new List<int> {1, 3, 5, 7, 9, 2, 4, 6, 8, 0};

var res = 
	from n in lst
	where n % 2 == 0 && n >= 4
	orderby n
	select n;

链式表达式

var lst = new List<int> {1, 3, 5, 7, 9, 2, 4, 6, 8, 0};

var res = lst
	.Where(n => n >= 4 && n % 2 == 0)
	.OrderBy(n => n);

取两个数组的交集

var arr1 = new int[] {1, 2, 3, 4, 5, 6};
var arr2 = new int[] {4, 5, 6, 7, 8, 9};

var res = arr1.Intersect(arr2).Dump();

统计数字出现的频率

var rand = new Random(1334);
var arr = Enumerable.Range(0, 200).Select( _ => rand.Next(20));

var res = arr
	.GroupBy(x => x)
	.Select(g => new { g.Key, Count = g.Count()})
	.Dump();
var rand = new Random(1334);
var arr = Enumerable.Range(0, 200).Select( _ => rand.Next(20));

var res = arr
	.GroupBy(x => x)
	//.Select(g => new { g.Key, Count = g.Count()})
	.ToDictionary(g => g.Key, g => g.Count())
	.Dump();
var rand = new Random(1334);
var arr = Enumerable.Range(0, 200).Select( _ => rand.Next(20));

var res = 
	from x in arr
	group x by x into g
	select new { g.Key, Count = g.Count()};
	
res.Dump();

重要概念:延迟执行(defer)与消耗(exhaust)

延迟执行:在写query语句的时候,并没有执行,等到调用输出的时候,才执行了。
消耗:看结果的操作

并行消耗 ParallelQuery

实例

var urls = new string[] {
	"http://www.e.com/pic1.jpg",	
	"http://www.e.com/pic2.jpg",	
	"http://www.e.com/pic3.jpg",	
};

//var tasks = new List<Task>();
//foreach(var url in urls) 
//{
//	tasks.Add(DownloadAsync(url, url.Split('/').Last()));
//}

//链式表达式
var tasks = urls
	.Select(url => DownloadAsync(url, url.Split('/').Last()));

await Task.WhenAll(tasks);
"finish".Dump();

async Task DownloadAsync(string url, string fileName)
{
	await Task.Delay(1000);
	$"{fileName} downloaded.".Dump();
}

新手常犯的错误

  1. 常用的方法
  • Intersect() 求交集
  • First() Last() Average()
  • Count() First() Min() Sum() 可以传参
  • Max()和MaxBy()的区别
var arr = new List<int> {1, 2, 3, 4, 5, 6};
//找第一个元素或最后一个元素Last()
arr.Select(x => x).First();

//求平均数
//如果你有一个整数序列,调用Average()方法后将返回一个 double 类型的平均值。
//如果你有一个浮点数序列,调用Average()方法后将返回一个与输入序列相同的浮点数类型的平均值。
arr.Average();

//拿第一个偶数
arr.First(x => x % 2 == 0);

//获取所有偶数的数量
arr.Count(x => x % 2 == 0);

//按照某种规则排序然后获取
people.MaxBy(p => p.Age);

//default
people.FirstOrDefault(x => x.Age >= 22);
  1. 用着爽,但是丝毫不考虑开销
  • 滥用ToList(), arr.Where().OrderBy().ToList()[0]
  • 滥用Count(), Count() > 0
  • 滥用OrderBy(), 不用sort()
  • 不知道First()和Single()的区别
//这样的操作很费时间
bool res = arr.Where(x => x > 5000).Count() > 0;

//应该改成下面的操作,Any有短路机制,发现第一个就返回了
bool res = arr.Any(x => x > 5000);

//默认排序的话,直接用List的Sort()就行
//或者Array.Sort();,用于数组排序

//First()找到第一个就返回了,有短路机制
//Single()会保证是不是唯一的,他会遍历整个列表,有多个重复的元素的话会直接报错

标签:Count,arr,res,笔记,学习,LINQ,var,new,Select
From: https://www.cnblogs.com/xavierxiu/p/18012604

相关文章

  • 读千脑智能笔记10_人类智能存在的风险
    1. 人类智能存在的风险1.1. “末日时钟”1.1.1. 核战争引发的大火列为地球毁灭的主要原因1.1.2. 气候变化列为人类自我毁灭的第二大潜在原因1.2. 除非我们刻意加入自私的驱动力、动机或情感,否则智能机器并不会威胁到人类的生存1.2.1. 人类在不远的将来会创造出更多的......
  • 2024/2/10学习进度笔记
    RDD,学名可伸缩的分布式数据集(ResilientDistributedDataset)。是一种对数据集形态的抽象,基于此抽象,使用者可以在集群中执行一系列计算,而不用将中间结果落盘。而这正是之前MR抽象的一个重要痛点,每一个步骤都需要落盘,使得不必要的开销很高。对于分布式系统,容错支持是必不可少的。......
  • [spring] spring学习笔记(3): 通过注解实现依赖注入
    注解Annotation注解是代码中的一种特殊标记,java中的格式为@Anno_Name(pro=value)注解可以被使用在方法,类和属性上;在spring中,使用注解来实现自动装配,可以简化Bean的配置,基本步骤如下:引入依赖开启组件扫描使用注解定义Bean注入依赖引入依赖在新建的spring项目下的src/main......
  • Git学习心得
    origin为远程仓库别名,main为远程仓库分支,master为本地分支gitremote显示所有远程仓库别名gitremoteadd别名远程仓库连接gitinit初始化仓库gitadd添加文件到暂存区gitrm[-r]删除暂存区文件gitcommit提交暂存区到本地仓库gitpush(-u可以绑定master和main)orig......
  • fast.ai 深度学习笔记(三)
    深度学习2:第1部分第6课原文:medium.com/@hiromi_suenaga/deep-learning-2-part-1-lesson-6-de70d626976c译者:飞龙协议:CCBY-NC-SA4.0来自fast.ai课程的个人笔记。随着我继续复习课程以“真正”理解它,这些笔记将继续更新和改进。非常感谢Jeremy和Rachel给了我这个......
  • 【学习笔记】李宏毅 2023 春机器学习课程听课记录
    1ChatGPT原理剖析ChatGPT的社会化:学会文字接龙人类引导文字接龙方向模仿人类喜好用增强式学习向模拟老师学习1.1预训练(Pre-train)ChatGPT真正在做的事情本质上是文字接龙,将其看成一个函数\(f(x)\),其中的\(x\)自变量可以是用户输入的一个语句,得到的函数就是接下来......
  • fast.ai 机器学习笔记(一)
    机器学习1:第1课原文:medium.com/@hiromi_suenaga/machine-learning-1-lesson-1-84a1dc2b5236译者:飞龙协议:CCBY-NC-SA4.0来自机器学习课程的个人笔记。随着我继续复习课程以“真正”理解它,这些笔记将继续更新和改进。非常感谢Jeremy和Rachel给了我这个学习的机会。......
  • fast.ai 机器学习笔记(四)
    机器学习1:第11课原文:medium.com/@hiromi_suenaga/machine-learning-1-lesson-11-7564c3c18bbb译者:飞龙协议:CCBY-NC-SA4.0来自机器学习课程的个人笔记。随着我继续复习课程以“真正”理解它,这些笔记将继续更新和改进。非常感谢Jeremy和Rachel给了我这个学习的机会......
  • fast.ai 机器学习笔记(三)
    机器学习1:第8课原文:medium.com/@hiromi_suenaga/machine-learning-1-lesson-8-fa1a87064a53译者:飞龙协议:CCBY-NC-SA4.0来自机器学习课程的个人笔记。随着我继续复习课程以“真正”理解它,这些笔记将继续更新和改进。非常感谢Jeremy和Rachel给了我这个学习的机会。......
  • fast.ai 机器学习笔记(二)
    机器学习1:第5课原文:medium.com/@hiromi_suenaga/machine-learning-1-lesson-5-df45f0c99618译者:飞龙协议:CCBY-NC-SA4.0来自机器学习课程的个人笔记。随着我继续复习课程以“真正”理解它,这些笔记将继续更新和改进。非常感谢Jeremy和Rachel给了我这个学习的机会。......