问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

list<datas> 已经取到数据,但是数据有重复的,怎样去掉重复的,求简单的代码,大神,前面答得我不太懂

发布网友 发布时间:2023-04-24 05:33

我来回答

1个回答

热心网友 时间:2023-10-11 09:17

前面不是已经说得很清楚了吗?

// 这是扩展IEnumerable<T>泛型接口。这个扩展类不能落掉
static class ExternEnumerable {
        public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
        {
            HashSet<TKey> seenKeys = new HashSet<TKey>();
            foreach (TSource element in source)
            {
                if (seenKeys.Add(keySelector(element)))
                {
                    yield return element;
                }
            }
        }
    }
     
    // 筛选去重调用
     IEnumerable<User> ie = list; // 关键点1:先转换为IEnumerable接口类型  
     // 关键点2:把你需要过滤为重复的条件(即属性)用"|"进行拼接成一个key.
     ie=ie.DistinctBy<User,string>(u=>u.DatasName+"|"+u.DatasType+"|"+u.DatasValue);
     
 // 完整示例:
  internal class User{
        public string DatasName { get; set; }
        public string DatasType { get; set; }
        public string DatasValue { get; set; }
    }
    // 扩展IEnumerable<T>
    internal static class ExternEnumerable{
        // 这里的TKey泛型参数化可以理解为你要去重的条件(作为哈希Key)
        // 形如:字段A+字段B+字段C+字段N 若是重复的拼接后的结果也必须相等
        //  因为哈希Key是不可以重复的从而就达到了去重目的
        // 这个是算法思想,需要楼主自己去体会。
        internal static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
        {
            HashSet<TKey> seenKeys = new HashSet<TKey>(); // 哈希值
            foreach (TSource element in source) // 遍历
            {
                if (seenKeys.Add(keySelector(element))) // 添加哈希键
                {
                    yield return element;  // 使用yield可以提高代码性能(暂挂返回)
                }
            }
        }
    }

    class App
    {
        unsafe static void Main(string[] args)
        {
            IList<User> list = new List<User>{
                new User(){DatasName="类别",DatasType="INVALID",DatasValue="结构柱"},
                new User(){DatasName="类别2",DatasType="INVALID2",DatasValue="结构柱2"},
                new User(){DatasName="类别",DatasType="INVALID",DatasValue="结构柱"},
                new User(){DatasName="类别3",DatasType="INVALID3",DatasValue="结构柱3"},
                new User(){DatasName="类别",DatasType="INVALID",DatasValue="结构柱"}
            };

            // 去重
            IEnumerable<User> ie = list; // 先转换为IEnumerable接口类型
            ie=ie.DistinctBy<User,string>(u=>u.DatasName+"|"+u.DatasType+"|"+u.DatasValue);
            list = ie.ToList(); // 去重后交回给list

            foreach (User item in list)
            {
                Console.WriteLine(item.DatasName+"\t"+item.DatasType+"\t"+item.DatasValue);
            }
        }

    }

来自:求助得到的回答

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
弹钢琴时手指速度总是不自觉变快怎么办? 弹钢琴时速度总是不自觉变快怎么办? 微信发表情包上限是多少 ...8.0.3版本更新什么?微信表情包上限变成999是什么 成人毛线斗篷式开襟披肩编织 江苏洛社商贸城项目有哪些主要特点和设施? 永明镇的乡镇建设 蓝光花满庭小区基本信息 洛社商贸城项目概括 怀孕了能不能吃汤圆 罗马体在ai中是什么字体 唤作的诗词唤作的诗词是什么 唤做的诗词唤做的诗词是什么 唤取的诗词唤取的诗词是什么 呼应的诗词呼应的诗词是什么 潺潺的意思潺潺的意思是什么 金华旅游景点哪里好玩 判决书的解释判决书的解释是什么 施字的意思 施是什么意思 儛女的解释 戈马的读音戈马的读音是什么 横戈的读音横戈的读音是什么 二手苹果8,8+128多少元 为什么紫霞会说,“我看到了这开头,却看不到这结局。”这句话是什么意思? 你总是不能让人溶解的样子是什么意思 不明白的是你为何情愿,让风尘刻画你的样子是什么意思 云起太华山,云山互明灭。的英文怎么读? 交通事故案子不结最长多久 泻痢的拼音狐泻痢的拼音是什么 泄痢的网络解释泄痢的网络解释是什么 汇编环境调试程序时怎么看定义了的数据段信息?就是data1的值之类 从DATA单元开始顺序存放了6个8位二进制无符号数,求它们的和以及求他们的平均值,分别存入SUM和AVG单元中 国考行测39分怎么进面吗 建行储蓄卡被冻结了怎么解决 开通视频号填名字老显示名字不可使用,和真名字都不能用是怎么回事? 微信视频号能发第三方名字吗 馒头用什么水蒸 在东莞虎门拍婚纱照一般要多少钱?要注意什么? 东莞拍个多外景的婚纱照一般多少钱? 键盘打不了字的原因键盘打不出字怎么办 lg手机电源下面的按键怎么用 LG手机锁屏忘记密码请问怎样开锁? 商标里的字是我用方正字体改的,能单为这几个字申请版权么? 诳乱的结构诳乱的结构是什么 诳吓的结构诳吓的结构是什么 削减的引证解释削减的引证解释是什么 削绌的引证解释削绌的引证解释是什么 割减的引证解释割减的引证解释是什么 裁减的引证解释裁减的引证解释是什么 镌减的引证解释镌减的引证解释是什么