查询表达式
| 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) |
| |
| .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 = 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(); |
| } |
新手常犯的错误
- 常用的方法
- Intersect() 求交集
- First() Last() Average()
- Count() First() Min() Sum() 可以传参
- Max()和MaxBy()的区别
| var arr = new List<int> {1, 2, 3, 4, 5, 6}; |
| |
| arr.Select(x => x).First(); |
| |
| |
| |
| |
| arr.Average(); |
| |
| |
| arr.First(x => x % 2 == 0); |
| |
| |
| arr.Count(x => x % 2 == 0); |
| |
| |
| people.MaxBy(p => p.Age); |
| |
| |
| people.FirstOrDefault(x => x.Age >= 22); |
- 用着爽,但是丝毫不考虑开销
- 滥用ToList(), arr.Where().OrderBy().ToList()[0]
- 滥用Count(), Count() > 0
- 滥用OrderBy(), 不用sort()
- 不知道First()和Single()的区别
| |
| bool res = arr.Where(x => x > 5000).Count() > 0; |
| |
| |
| bool res = arr.Any(x => x > 5000); |
| |
| |
| |
| |
| |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律