zoukankan      html  css  js  c++  java
  • 集合对象去重

        public class Compare<T, C> : IEqualityComparer<T>
        {
            private Func<T, C> _getField;
            public Compare(Func<T, C> getfield)
            {
                this._getField = getfield;
            }
            public bool Equals(T x, T y)
            {
                return EqualityComparer<C>.Default.Equals(_getField(x), _getField(y));
            }
            public int GetHashCode(T obj)
            {
                return EqualityComparer<C>.Default.GetHashCode(this._getField(obj));
            }
        }
    Compare
      public static class CommonHelper
        {
            /// <summary>
            /// 自定义Distinct扩展方法
            /// </summary>
            /// <typeparam name="T">要去重的对象类</typeparam>
            /// <typeparam name="C">自定义去重的字段类型</typeparam>
            /// <param name="source">要去重的对象</param>
            /// <param name="getfield">获取自定义去重字段的委托</param>
            /// <returns></returns>
            public static IEnumerable<T> MyDistinct<T, C>(this IEnumerable<T> source, Func<T, C> getfield)
            {
                return source.Distinct(new Compare<T, C>(getfield));
            }
        }
    //定义一个类继承IEqualityComparer接口
        public class ModelComparer : IEqualityComparer<Model>
        {
            public bool Equals(Model x, Model y)
            {
                return x.Title.ToUpper() == y.Title.ToUpper();
            }
            public int GetHashCode(Model obj)
            {
                return obj.Title.ToUpper().GetHashCode();
            }
        }
    modelList = modelList.Distinct(new ModelComparer()).ToList();
    var title = modelList.GroupBy(m => m.Title.ToLower().Trim()).Select(m => new { ID = m.FirstOrDefault().ID });
                modelList = modelList.Where(m => title.Select(mo => mo.ID).Contains(m.ID)).ToList(); 
                foreach (var item in modelList)
                {
                    Console.WriteLine(item.ID + "	" + item.Title);
                }
  • 相关阅读:
    有哪些命令行的软件堪称神器?
    [置顶] 《技术大牛养成指南》
    Java 8 集合不完全一览
    [置顶] tcpflow 抓包
    被遗忘的 Logrotate
    [置顶] Every Programmer Should Know These Latency Numbers
    安装 Ubuntu 14.04 之后要做的一些事
    windows.h系统函数
    《葡萄源》
    在 Visual Studio 中创建一个简单的 C# 控制台应用程序
  • 原文地址:https://www.cnblogs.com/qq605490312/p/6869499.html
Copyright © 2011-2022 走看看