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#
上一篇:
C# 反射 判断类型是否是列表
下一篇:
C# 自定义用户控件
Power by Typecho. Theme by Puma. Written by 董川民-
独立开发者
渝ICP备16006207号-2
渝公网安备 50011202503233号
友情链接: