首页 > 其他分享 >list集合distinctby的使用

list集合distinctby的使用

时间:2024-11-08 18:31:31浏览次数:1  
标签:Name People Age list Add distinctby 集合 new lista

最近使用集合的distinctby根据元素的某个属性进行过滤,但是最后的结果是需要有序的,所以想知道过滤后的顺序会不会改变。

如何使用

官方文档:根据指定的键选择器函数返回序列中的不同元素

我的理解:根据指定的属性去重

代码

var lista = new List<People>();
lista.Add(new People()
{
    Name = "LaoWang",
    Age = 1
});
lista.Add(new People()
{
    Name = "LaoLi",
    Age = 2
});
lista.Add(new People()
{
    Name = "LaoLi42",
    Age = 4
});
lista.Add(new People()
{
    Name = "LaoLi41",
    Age = 4
});
lista.Add(new People()
{
    Name = "LaoZhang31",
    Age = 3
});
lista.Add(new People()
{
    Name = "LaoZhang32",
    Age = 3
});

var listb =lista.DistinctBy(a=>a.Age).ToList();
foreach (var item in listb)
{
    Console.WriteLine(item.Name + " " + item.Age );
}

结果 :

LaoWang 1
LaoLi 2
LaoLi42 4
LaoZhang31 3

过滤前后元素还是保持原有的顺序

看看源码

private static IEnumerable<TSource> DistinctByIterator<TSource, TKey>(IEnumerable<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer<TKey>? comparer)
        {
            using IEnumerator<TSource> enumerator = source.GetEnumerator();
 
            if (enumerator.MoveNext())
            {
                var set = new HashSet<TKey>(DefaultInternalSetCapacity, comparer);
                do
                {
                    TSource element = enumerator.Current;
                    if (set.Add(keySelector(element)))
                    {
                        yield return element;
                    }
                }
                while (enumerator.MoveNext());
            }
        }

利用了hashset去重,元素顺序并没有打乱,首先将指定的key尝试添加进hashset,成功表明key并没有重复,失败表明已经有了相同的key,此元素将会被过滤掉。

总结

DistinctBy 过滤前后元素的顺序保持不变,内部使用hashset帮助过滤。在此记录以免忘记。

标签:Name,People,Age,list,Add,distinctby,集合,new,lista
From: https://www.cnblogs.com/guoxiaotian/p/18535633

相关文章

  • Camera List Record - 120
    1.bronicaetrsi##特点120单反,645画幅有135后背,可拍宽幅使用感受酷强:配置全,素质高,质量好实拍2.rolleiflex3.5t特点双镜头反光,对比单反来说体积小,重量轻镜间快门震动小使用感受优雅,太优雅了画质未知实拍待冲洗......
  • C++:模拟实现STL的list
    目录一.list类1.list的创建节点2.list迭代器的运算符操作3.list的构造函数及析构4.list的迭代器5.list的插入及删除二.整体代码1.list.h2.list.cpp在上一节已经了解list在库中的用法,在这里实现list的底层逻辑一.list类1.list的创建节点template<classT>struc......
  • 帝国CMS列表页模板list.var中调用栏目名称非栏目别名的方法
    方法一:勾选“使用程序代码”。在list.var中添加以下代码:$listtemp='<li>【'.$class_r[$r['classid']]['classname'].'】<ahref="[!--titleurl--]">[!--title--]</a>[!--newstime--]</li>';......
  • python基础——04数据类型(元组,集合,字典)
    一、元组(tuple)1.1什么是元组元组和列表相似,但元组的元素放在()里面。t=(1,2,3,4,5)print(type(t))#<class'tuple'>t1=('hello')#<class'str'>这不是元组t2=('hello',)#<class'tuple'>print(type(t1),type(t2)......
  • C# 都有哪些集合?
    在C#中,集合(Collection)是用来存储一组数据的对象,通常是同一类型的数据。C#提供了多种不同类型的集合,每种集合都有其独特的特点和用途。常见的集合可以分为以下几类:数组、泛型集合、非泛型集合、其他集合类型、并发集合1.数组(Array)定义:数组是C#中最基本的集合类型,用......
  • 【IPTV/IPTVnator】集合开源工具 TV 和 iptvnator 实现 IPTV 播放源的成功更新及直播
    文章目录前言一、资源说明1、iptvnator2、TV二、下载工具1、下载TV工具2、下载IPTVnator三、使用步骤1、更新iptv数据源A、默认测速方式B、使用ffmpeg作为测速工具2、使用iptvnator播放iptv数据源3、使用vlc工具播放iptv数据源四、iptvnator修改为v......
  • 49_api_intro_stock_fund_fundopenrankinglist
    开放式基金实时排行API数据接口多维度参数返回,实时数据,类型参数筛选。1.产品功能返回实时开放式基金排行数据可定义查询基金类型参数;多个基金属性值返回多维指标,一次查询毫秒级返回;数据持续更新与维护;全接口支持HTTPS(TLSv1.0/v1.1/v1.2/v1.3);全面兼容Apple......
  • 46_api_intro_stock_fund_fundetfopenrankinglist
    开放式场内交易基金排行API数据接口多维度参数返回,实时数据,返回多维度指数。1.产品功能返回实时开放式ETF基金排行数据多个基金属性值返回多维指标,一次查询毫秒级返回;数据持续更新与维护;全接口支持HTTPS(TLSv1.0/v1.1/v1.2/v1.3);全面兼容AppleATS;全国多节......
  • 提供一个基本的cmakelists.txt文件
     project(ftptest)message("----------cmake${PROJECT_NAME}----------start")#设置构建类型为Release#set(CMAKE_BUILD_TYPERelease)set(CMAKE_VERBOSE_MAKEFILEON)#set(CMAKE_CXX_FLAGS"$ENV{CXXFLAGS}-rdynamic-O0-ggdb-std=c++11-Wall-Wno-......
  • uBlocklist屏蔽垃圾搜索结果
    近年来特别是Google的中文搜索结果体验越来越差,出现了越来越多「不知所谓」的网站,这些网站通过机器翻译、直接复制的方式「拼接」而成一个网站占据了大量的搜索结果,这类网站就是——「内容牧场」。什么是内容牧场内容农场(或内容工厂,英文名为contentfarm)是指生成大量文字性网......