C#集合List去掉重复对象的方法
2021/7/19 9:05:07
本文主要是介绍C#集合List去掉重复对象的方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
.NET[C#]使用LINQ从List集合中删除重复对象元素(去重)的方法有哪些?
问题描述
比如有如下的List集合:
1 Item1 IT00001 $100
2 Item2 IT00002 $200
3 Item3 IT00003 $150
1 Item1 IT00001 $100
3 Item3 IT00003 $150
使用LINQ如何实现对以上List集合的去重操作,具体实现有哪些呢?
方案一
var distinctItems = items.Distinct();
如果需要对泛型实体中的部分属性进行去重操作,则可以创建一个自定义的比较器:
class DistinctItemComparer : IEqualityComparer {
public bool Equals(Item x, Item y) { return x.Id == y.Id && x.Name == y.Name && x.Code == y.Code && x.Price == y.Price; } public int GetHashCode(Item obj) { return obj.Id.GetHashCode() ^ obj.Name.GetHashCode() ^ obj.Code.GetHashCode() ^ obj.Price.GetHashCode(); }
}
调用方法:
var distinctItems = items.Distinct(new DistinctItemComparer());
方案二(推荐)
var distinctItems = items.GroupBy(x => x.Id).Select(y => y.First());
方案三
使用 MoreLinq 组件:
var distinct = items.DistinctBy( i => i.Id );
方案四
var query = collection.GroupBy(x => x.title).Select(y => y.FirstOrDefault());
方案五
创建静态扩展方法,如:
public static class DistinctHelper
{
public static IEnumerable DistinctBy<TSource, TKey>(this IEnumerable source, Func<TSource, TKey> keySelector)
{
var identifiedKeys = new HashSet();
return source.Where(element => identifiedKeys.Add(keySelector(element)));
}
}
调用方法:
var outputList = sourceList.DistinctBy(x => x.TargetProperty);
其中 x.TargetProperty 请替换成类对应的属性。
示例程序:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var people = new List
{
new Person {Id=1,Name=“Curry”,Age=26 },
new Person {Id=1,Name=“Curry”,Age=26 },
new Person {Id=3,Name=“James”,Age=27 },
new Person {Id=4,Name=“Kobe”,Age=38 }
};
var distinctPeople = people.DistinctBy(x => x.Name).ToList();
distinctPeople.ForEach(x =>
Console.WriteLine($“Id:{x.Id},Name:{x.Name},Age:{x.Age}”)
);
Console.ReadKey();
}
}
public class Person { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } public static class DistinctHelper { public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector) { var identifiedKeys = new HashSet<TKey>(); return source.Where(element => identifiedKeys.Add(keySelector(element))); } }
}
方案六
public static class DistinctHelper
{
public static IEnumerable DistinctBy<TSource, TKey>(this IEnumerable source, Func<TSource, TKey> keySelector)
{
var identifiedKeys = new HashSet();
foreach (var item in source) { if (identifiedKeys.Add(keySelector(item))) yield return item; } } }
这篇关于C#集合List去掉重复对象的方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具
- 2024-01-24.NET集成IdGenerator生成分布式全局唯一ID
- 2024-01-23用CI/CD工具Vela部署Elasticsearch + C# 如何使用
- 2024-01-23.NET开源的简单、快速、强大的前后端分离后台权限管理系统