在开发中当后端接受到JSON对象数组时,当转成List<T>时后会有重复的情况,如何高效快捷的去除重复呢,这篇文章我们介绍三种去除数组对象里的重复方法。.
1、循环去除重复
使用循环去除重复,需要新实例化一个List<T>,再循环判断数组对象里是否有这个对象,如果有没有重复添加到这个集合对象,否则不添加。代码如下:
//在对象添加数据,下面案例都用这个集合public static List<Customer> GetCustomer(){List<Customer> list = new List<Customer>();list.Add(new Customer { id = 1, name = "刘德华", age = 56, email = "ldh@net.cn" });list.Add(new Customer { id = 2, name = "张学友", age = 52, email = "zxy@net.cn" });list.Add(new Customer { id = 3, name = "黎明", age = 58, email = "lm@net.cn" });list.Add(new Customer { id = 4, name = "郭富城", age = 60, email = "gfc@net.cn" });list.Add(new Customer { id = 4, name = "古天乐", age = 55, email = "gtl@net.cn" });list.Add(new Customer { id = 3, name = "黎明", age = 58, email = "lm@net.cn" });return list;}static void Main(string[] args){var rel = new List<Customer>();//新new一个对象,foreach (var item in GetCustomer()){ //判断是否存在,不存在添加if (rel.Where(w => w.id == item.id & w.name == item.name && w.age == item.age && w.email == item.email).Count() == 0)rel.Add(item);//不存在新增}foreach (var item in rel){Console.WriteLine(item.name);}Console.WriteLine("======================");}//客户对象,下面案例不再列出public class Customer{public int id { get; set; }public string name { get; set; }public string email { get; set; }public int age { get; set; }}
2、使用Linq中GroupBy去重
linq是个好东西,对于对象的操作很方便,GroupBy类似数据库中的group by。这个例子就不需要循环了,直接一句代码解决,简便多了。代码如下:
static void Main(string[] args){//一句代码解决。var rel= GetCustomer().GroupBy(g=>new { g.id, g.name,g.age,g.email });foreach (var item in rel){Console.WriteLine(item.Key.name);}Console.WriteLine("======================");}
3、使用Linq中Distinct去重
Distinct跟数据库中的Distinct还是有一定的区别,对于对象集合去除重复需要自定义客户对象的Comparer方法。代码如下:
static void Main(string[] args){//Distinct方法var rel = GetCustomer().Distinct(new CustomerComparer());foreach (var item in rel){Console.WriteLine(item.name);}Console.WriteLine("======================");}//需要继承IEqualityComparer,先判断第一个字段,如果有重复再做对比。public class CustomerComparer : IEqualityComparer<Customer>{public bool Equals(Customer x, Customer y){if (x == null)return y == null;return x.id == y.id && x.name == y.name && x.age == y.age&&x.email==y.email;}public int GetHashCode(Customer obj){if (obj == null)return 0;return obj.id.GetHashCode();}}
结语
这三种去重复的方法,笔者比较喜欢使用第二种,第二种代码量少,容易理解。你喜欢哪种去重复的方法呢?欢迎留言。面试时面试官也会考到这种基础问题,如果你能答出这三种方法就很不错了。 希望本文对大家学习和工作有一定参考价值,同时欢迎大家留言讨论,谢谢大家的支持。