首页 > 其他分享 >GroupBy与DistinctBy的区别和用法(System.Linq)

GroupBy与DistinctBy的区别和用法(System.Linq)

时间:2024-08-27 10:25:32浏览次数:13  
标签:Name Age System Linq DistinctBy pets new GroupBy

GroupBy

定义:对序列中的元素进行分组

返回:一个分组的集合,每个分组包含满足相同条件的元素

 // Create a list of pets.
    List<Pet> pets =
        new List<Pet>{ new Pet { Name="Barley", Age=8 },
                       new Pet { Name="Boots", Age=4 },
                       new Pet { Name="Whiskers", Age=1 },
                       new Pet { Name="Daisy", Age=4 } };

    // Group Pet.Age values by the Math.Floor of the age.
    // Then project an anonymous type from each group
    // that consists of the key, the count of the group's
    // elements, and the minimum and maximum age in the group.
    var query = petsList.GroupBy(
        pet => Math.Floor(pet.Age),
        pet => pet.Age,
        (baseAge, ages) => new
        {
            Key = baseAge,
            Count = ages.Count(),
            Min = ages.Min(),
            Max = ages.Max()
        });

DistinctBy

定义:主要用于在集合中根据某个属性去除重复项

返回:不包含重复值的无序序列,每个元素在指定属性上是唯一的

 

 // Create a list of pets.
    var pets =new List<Pet>();

//去掉重复值
    var query = pets
        .DistinctBy(ps=> new { ps.Name, ps.Age}).ToList();

 

二者区别

GroupBy :分组操作,返回一个集合元素

DistinctBy :去重操作,返回去重后的集合元素,简单有效去重方法

 

注意:但是如果需要使用到分组去重的操作,可以这样进行

var query= pets
    .GroupBy(ps => ps.Name)
    .Select(g => g.First())
    .ToList();

GroupBy 通常结合Select 和 First 等方法来实现类似功能

如果仅仅是简单的操作推荐使用DistinctBy 方法,并且性能也更加好

标签:Name,Age,System,Linq,DistinctBy,pets,new,GroupBy
From: https://www.cnblogs.com/liuffsb/p/18382176

相关文章

  • ( 基于SystemView软件)AM调制与解调仿真实验
    一、实验目的:熟悉使用SystemView软件,了解各部分功能模块的操作和使用方法。通过实验进一步观察、了解模拟信号AM调制、解调原理。掌握AM调制信号的主要性能指标。比较、理解AM调制的相干解调原理。二、实验器材:装有SystemViewbyELANIX软件的电脑实验内容:根据:系统定......
  • Request processing failed:MyBatisSystemException 黑马web开发课程P152中可能出现的
    该异常的最后一句,通过翻译,大概是:   [dispatcherServlet]:servlet.service()forservlet[dispatcherServlet]在路径[]的上下文中抛出异常[请求处理失败:MyBatisSystemException]    经过对代码的检查,发现controller,sevice,dao层业务逻辑都没有问题dao层的map......
  • LogicBench: Towards Systematic Evaluation of Logical Reasoning Ability of Large
    本文是LLM系列文章,针对《LogicBench:TowardsSystematicEvaluationofLogicalReasoningAbilityofLargeLanguageModels》的翻译。LogicBench:大型语言模型逻辑推理能力的系统评价摘要1引言2相关工作3LogicBench4结果和分析5结论局限性摘要最近......
  • Exploring the Nexus of Large Language Models and Legal Systems: A Short Survey
    本文是LLM系列文章,针对《ExploringtheNexusofLargeLanguageModelsandLegalSystems:AShortSurvey》的翻译。探索大型语言模型与法律制度的联系:一个简短的调查摘要1引言2大型语言模型在法律任务中的应用3不同国家和地区的微调大型语言模型4大型语言......
  • [C++ Error] f0202.cpp(13): E2268 Call to undefined function 'system'
    system('pause');解决方法,修改代码:system("pause");[C++Error]f0202.cpp(13):E2268Calltoundefinedfunction'system'错误解释:这个错误表明您在C++代码中尝试调用了一个未定义的函数system。system函数是C标准库中的函数,用于执行一个字符串中给出的命令。在C++中,......
  • C++暂停黑窗口 system( “pause “);
    在编写的c++程序中,如果是窗口,有时会一闪就消失了,如果不想让其消失,在程序结尾处添加:system("pause");注意:不要再return的语句之后加,那样就执行不到了。分析:system()是调用系统命令;pause暂停命令;这样在运行到此处时,会显示“Pressanykeytocontinue...”也就是“按任意键......
  • Android fork 进程 process(init/Zygote/SystemServer)
    ##Android的init/Zygote/SystemServer Android手机先开机,init/Zygote/SystemServer,然后启动Framework,然后启动Launcher;【安装APP(PMS),】然后启动APP(AMS)。所有的Android应用进程都是有Zygote进程fork出来的。Android系统启动流程(一)解析init进程-http://blog.csdn.net/itach......
  • 【Linux提权】check-system文件
    【此次省略一万字.........】成功突破边界!提权:看了sudo-l,发现一个shutdown命令可以,但是这名字应该是重启吧。。。先跑一跑linpeas.sh,试了一下跑出来的CVE,没有成功找一找具有root命令并且我们可以写权限的文件:find/-userroot-typef-perm-o=rw-ls2>/dev/null|grep......
  • 利用子域的System权限通往父域
    前言最近翻阅笔记发现一篇文章提到通过子域的System权限可以突破获取到父域权限,本文将对此技术进行尝试复现研究。利用分析环境信息:子域:187、sub.cs.org父域:197、cs.org首先通过在子域的域控机器上打开mmc.exe->连接ADSI->配置来查看子域的配置命名上下文:从配置中可以看......
  • Robot Operating System——使用VSCode调试ROS2代码
    大纲安装插件/组件VSCode插件调试组件自定义cmake命令配置CMakeTools新增CMakePresets.json修改默认的cmake编译Debug版配置测试环境启动测试总结参考资料工欲善其事必先利其器。直接使用GDB调试代码毕竟不是很方便,我们将探索如何使用VSCode调试ROS2的代码。我们......