zoukankan      html  css  js  c++  java
  • C# List根据对象属性去重的四种方法

    本文整理了C#中给List根据对象属性去重的四种方法。

    方法一:循环遍历List,借助Dictionary存储去重的对象。

    Dictionary<string, Item> result = new Dictionary<string, Item>();
    foreach (Item item in list)//list为待去重列表
    {
        Item temp;
        if (!result.TryGetValue(item.name, out temp))
        {
            result.Add(item.name, item);
        }
    }
    List<Item> result_list = result.Values.ToList();

    方法二:利用ToLookup查找,并转为Dictionary

    List<Item> result = list.ToLookup(item => item.name).ToDictionary(item => item.Key, item => item.First()).Values.ToList();

    方法三:自定义Compare方法实现

    List<Item> result = list.Distinct(new Compare()).ToList();

    方法四:利用GroupBy分组实现

    List<Item> result = list.GroupBy(item => item.name).Select(item => item.First()).ToList();

    其中,对象Item类如下:

    public class Item
    {
        public string name { get; set; }
        public string value { get; set; }
    }

    Compare方法如下:

    public class Compare : IEqualityComparer<Item>
    {
        public bool Equals(Item a, Item b)
        {
            return a.name == b.name;
        }
    
        public int GetHashCode(Item obj)
        {
            return obj.name.GetHashCode();
        }
    }
    *********************************** 愿 你 有 前 进 一 寸 的 勇 气 , 亦 有 后 退 一 尺 的 从 容 。 *********************************** *********************************** 请尊重作者的劳动成果,转载请注明出处。 ***********************************
  • 相关阅读:
    delphi 常用的将窗口置前的函数
    delphi中Message消息的使用方法
    批处理 删除文件
    CDR话单主要字段介绍
    集成学习算法总结----Boosting和Bagging
    Benchmark简介
    脚本中export不起作用的原因分析
    RAID详解[RAID0/RAID1/RAID10/RAID5]
    基于DPI(深度报文解析)的应用识别
    DPI (Deep Packet Inspection) 深度包检测技术
  • 原文地址:https://www.cnblogs.com/bosins/p/15421524.html
Copyright © 2011-2022 走看看