C# 去掉List重复元素的方法

来源:互联网 发布:数据中心网络架构 编辑:程序博客网 时间:2024/05/19 22:02

比如linq  Distinct  等等都可以,看看网上的这个例子:去掉modelList中title重复的内容,不区分大小写

复制代码
复制代码
复制代码
 class Program    {        static void Main(string[] args)        {            List<Model> modelList = new List<Model>()             { new Model() { ID = 1, Title = "abcde" },                new Model() { ID = 2, Title = "ABCDE" },                new Model(){ ID = 3, Title = "AbcdE" },                new Model() { ID = 4, Title = "A" },                 new Model() { ID = 5, Title = "a" }             };            Console.Read();        }    }    public class Model    {        public int ID { get; set; }        public string Title { get; set; }    }
复制代码
复制代码
复制代码

 

解决方案一:这里比较的前提是对象的哈希代码相等。否则不会比较,因为哈希代码不相等。两个对象显然不相等

复制代码
复制代码
复制代码
//定义一个类继承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 + "\t" + item.Title);            }
复制代码
复制代码

 

当然。如果你仅仅比较两个值是否相等。

 List<string> li1 = new List<string> { "8", "8", "9", "8", "0", "9" };            li1 = li1.Distinct().ToList();