添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • Linux
  • Nginx
  • 数据库
  • Python
  • PHP
  • C#
  • .NET
  • WPF
  • MAUI
  • Blazor
  • WinForm
  • 帝国CMS
  • AKCMS
  • Typecho
  • 织梦CMS
  • Visual Studio
  • Windows
  • Mac
  • Web前端
  • 数据采集
  • 运营
  • 产品
  • 摩托车
  • 电影
  • 杂事
  • 在开发中当后端接受到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(); } }

    这三种去重复的方法,笔者比较喜欢使用第二种,第二种代码量少,容易理解。你喜欢哪种去重复的方法呢?欢迎留言。面试时面试官也会考到这种基础问题,如果你能答出这三种方法就很不错了。 希望本文对大家学习和工作有一定参考价值,同时欢迎大家留言讨论,谢谢大家的支持。

    本文作者:后端Q 信息来源: 公众号 后端Q 所属分类: C# Power by Typecho. Theme by Puma. Written by 董川民- 独立开发者 渝ICP备16006207号-2 渝公网安备 50011202503233号

    友情链接: