首页 > 其他分享 >高效的Linq

高效的Linq

时间:2024-05-23 16:56:40浏览次数:21  
标签:Count 高效 url void arr Linq var new

语言集成查询
常见用途:.NET原生集合(List,Array,Dictionary等等)
SQL数据库
XML文档
JSON文档

常见功能:
排序、筛选、选择、分组、聚合、合并、最大值、最小值、求和、求平均、求数量等等;

两种形式:
查询表达式 query expression
链式表达式 chained expression


延迟执行
消耗:foreach、tolist(),toarray,todictionary,count(),min(),max(),sum(),take(),first(),last()

IEnumerable
IOrderedEnumerable
IQueryable(包含语法树)
ParallelQuery

 

/// <summary>
/// linq的两种写法:查询表达式 query expression和链式表达式 chained expression 
/// 1.Max()和MaxBy()的区别
/// 2.不要滥用ToList,Count,OrderBy
/// 3.first和single的区别
/// </summary>
internal class LinqDemoCls
{
    public static void Method()
    {
        var arr = Enumerable.Range(1, 10).ToArray()
            .AsParallel()
            .AsOrdered()//多线程下还要保证排序
            .Select(x =>
        {
            Thread.Sleep(500);
            return x * x;
        })
            .AsSequential();//AsSequential 将多线程的又转为IEnumerable

        foreach (var x in arr)
        {
            Console.WriteLine(x);
        }
    }


    /// <summary>
    /// 展平,二维数组变一维数组
    /// </summary>
    public static void Method2()
    {
        var mat = new int[][] {
        new[] { 1,2,3,4},
        new []{5,6,7,8 },
        new []{9,10,11,12 }
        };

        var res = from row in mat
                  from n in row
                  select n;

        var res2 = mat.SelectMany(x => x);

        res2.ToArray();
    }

    /// <summary>
    /// 笛卡尔积
    /// </summary>
    public static void Method3()
    {
        for(int i = 0; i < 5; i++)
        {
            for(int j = 0; j < 4; j++)
            {
                for(int k=0;k<3;k++)
                {
                    Console.WriteLine($"{i}{j}{k}");
                }
            }
        }

        var res = from i in Enumerable.Range(0, 5)
                  from j in Enumerable.Range(0, 4)
                  from k in Enumerable.Range(0, 3)
                  select $"{i}{j}{k}";

        res.ToList();

        var res2 = Enumerable.Range(0, 5)
            .SelectMany(r => Enumerable.Range(0, 4), (l, r) => (l, r))
            .SelectMany(r => Enumerable.Range(0, 3), (l, r) => (l.l, l.r, r))
            .Select(x => x.ToString());

        res2.ToList();
    }

    /// <summary>
    /// 字母出现次数,频率
    /// </summary>
    public static void Method4()
    {
        var words = new string[] { "tom", "jerry", "spike", "tyke", "butch", "quacker" };

        var query = from w in words
                    from c in w
                    group c by c into g
                    select new { g.Key, Count = g.Count() } into a
                    orderby a.Count descending
                    select a;
        query.ToList();

        var query2 = words.SelectMany(c => c)
            .GroupBy(c => c)
            .Select(g => new { g.Key, Count = g.Count() })
            .OrderBy(g => g.Count);

        query2.ToList();
    }

    /// <summary>
    /// 批量下载文件
    /// </summary>
    public  async void Method5()
    {
        var urls = new string[]
        {
            "http://www.example.com/pic1.jpg",
            "http://www.example.com/pic2.jpg",
            "http://www.example.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()));

        var tasks = from url in urls
                     let filename = url.Split("/").Last()
                     select DownloadAsync(url, filename);


        await Task.WhenAll(tasks);
    }

    async Task DownloadAsync(string url,string fileName)
    {
        await Task.Delay(1000);
        Console.WriteLine($"{fileName} download.");
    }


    /// <summary>
    /// 寻找派生类
    /// Humanize 类库,操作字符串
    /// </summary>
    public static void Method6()
    {
        var types = Assembly.GetAssembly(typeof(Exception))
            .GetTypes();

        types.Where(t => t.IsAssignableTo(typeof(Exception)))
            .Select(t => t.Name.Humanize(LetterCasing.Title))
            .OrderBy(t => t.Split().Length).ToList();

        var res = from type in types
                  where type.IsAssignableTo(typeof(Exception))
                  select type.Name.Humanize(LetterCasing.Title) into name
                  let wc = name.Split().Length
                  group name by wc into g
                  orderby g.Key
                  select new { Count = g.Count(), Items = g.ToList() };
      
    }

    /// <summary>
    /// 使用sort代替orderBy
    /// </summary>
    public static void Method7()
    {
        var arr = new List<int> { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };
       var a= arr.OrderBy(x => x); //orderBy是开辟了一个新地址内存空间,比较浪费性能

        arr.Sort();// 利用数组的排序方法,在对象本身上操作

        arr.Reverse();//desc的实现
        arr.Order();  //新语法
    }
}

 

标签:Count,高效,url,void,arr,Linq,var,new
From: https://www.cnblogs.com/hcy-zyy/p/18175982

相关文章

  • CeiT:商汤提出结合CNN优势的高效ViT模型 | 2021 arxiv
    论文提出CeiT混合网络,结合了CNN在提取低维特征方面的局部性优势以及Transformer在建立长距离依赖关系方面的优势。CeiT在ImageNet和各种下游任务中达到了SOTA,收敛速度更快,而且不需要大量的预训练数据和额外的CNN蒸馏监督,值得借鉴来源:晓飞的算法工程笔记公众号论文:Incorpora......
  • 亮数据:高效率数据采集,加速大模型训练!
    亮数据,适合大模型数据准备的可视化高效率数据采集工具。一、大模型训练需要数据大模型数据处理的流程,分为数据采集、数据清洗、数据评估和指令数据标注四个主要阶段,而这些阶段中最重要的就是数据采集阶段,需要海量的数据才能让大模型涌现智能。访问点击:亮数据加速数据采集......
  • 构建高效的软件研发生命周期:从技术选型到监控运维的完整流程
    引言现代软件研发已经超越了简单的编码和发布阶段,演化成了一个复杂的生命周期过程,涵盖了技术选型、初始化、开发、测试、部署、监控和运维等多个环节。这些环节相互关联,共同确保项目的成功交付和持续优化。本文将深入探讨如何构建高效的软件研发生命周期,包括关键步骤、最佳实践和......
  • 如何保障经销商收发文件的安全性及高效性?
    经销商在商业运作中会与多种角色进行文件数据的传输来往,比如客户、供应商等,因此经销商收发文件需要确保文件的安全性、准确性和及时性,这对于经销商的业务运营至关重要。经常遇到的经销商收发文件场景:供应商:经销商需要与供应商交换产品信息、订单详情、库存状态、采购合同等文件......
  • Django与前端框架协作开发实战:高效构建现代Web应用
    title:Django与前端框架协作开发实战:高效构建现代Web应用date:2024/5/2220:07:47updated:2024/5/2220:07:47categories:后端开发tags:DjangoREST前端框架SSR渲染SPA路由SEO优化组件库集成状态管理第1章:简介1.1Django简介Django是一个高级的PythonWeb......
  • Kimi 高效使用技巧,80%的人都不知道
    Kimi高效使用技巧,80%的人都不知道 聚焦于AI提示词+职场提效。 标题可能夸大或与内容不符34人赞同了该文章关注我,AI学习之旅上,我与您一同成长!一、引言Kimi作为国产之光,在过去的一个多月里成为国内大模型的香饽饽。据数据分析,Kimi网页、APP、......
  • 站在岸上学不会游泳 | 算法校招生的高效成长总结
       在这个由数据编织、由算法驱动的时代,AI大模型正成为推动社会进步的重要力量。我们不仅是变革的见证者,更是推动者和塑造者。感谢零售UP技术人栏目的邀请,本文借此机会回顾一下自己的算法之路上的一些故事和思考,希望能带给读者一些帮助。介绍自己我是2020届校招生,INFJ提倡......
  • 仿真数据传输常用方式PK,最安全高效的还得是它!
    仿真数据(simulateddata)是在计算机或其他设备上通过模拟真实环境或系统生成的数据。这种数据可以用于各种目的,包括测试、验证、预测和分析等。仿真数据在科研、工程、金融、半导体等领域都有广泛的应用,通过模拟真实环境或系统生成的数据可以为各种研究和实践提供有力支持。仿真......
  • C#-System-LinQ-条件精确查询、高级查询
    C#-System-LinQ-条件精确查询、高级查询 条件查询:Lambda表达式 Repeater1.DataSource=con.Car.Where(r=>r.Name==name);多条件查询:Repeater1.DataSource=con.Car.Where(r=>r.Name==name&&r.Price==Convert.ToDecimal(price)).ToList();高级查询:一、模糊查......
  • 突破边界:基于Windows 11的高效渗透测试系统构建
    在这篇文章中,我将向大家推荐一款基于Windows11的渗透测试系统,由一位行业内大佬封装而成。这个名为Windows11PenetrationSuiteToolkit的项目旨在提供一个开箱即用的Windows渗透测试环境,方便安全专家和爱好者进行渗透测试工作。项目地址你可以在GitHub上找到该项目:W......