前言
今天我们一起来讨论一下关于C#数据去重的的5种方式,每种方法都有其特点和适用场景,我们根据具体需求选择最合适的方式。当然欢迎你在评论区留下你觉得更好的C#数据去重的方式。
使用HashSet去重
C# 中的 HashSet 是一种集合类型,它确保其中的元素是唯一的,不允许重复值的存在。当你尝试向 HashSet 中添加一个重复的元素时,HashSet 会忽略重复的值,而不会引发错误。这使得 HashSet 成为一个非常方便的数据结构,用于存储一组唯一的元素,并且在需要时可以高效地进行查找、插入和删除操作,注意HashSet中的元素是无序的。
///
///使用HashSet去重
///TODO:HashSet是一个集合类,它的特点是不允许重复元素,可以方便地实现去重功能。
///
publicstaticvoidHashSetDuplicate()
{
vardataSource=newList(){1,2,3,2,5,88,99,99,100,88,30,50,15,100,99,99,2,3};
HashSetuniqueData=newHashSet(dataSource);
Console.WriteLine(string.Join(",",uniqueData));
}
使用Linq的Distinct()方法去重
Linq中的Distinct()方法用于从集合中筛选出不重复的元素。Distinct()方法基于元素的相等性来进行筛选,并返回一个包含不重复元素的新序列。底层实现还是使用到了HashSet。
///
///使用Linq的Distinct()方法去重
///
publicstaticvoidDistinctDuplicate()
{
vardataSource=newList(){1,2,3,2,5,88,99,99,100,88,30,50,15,100,99,99,2,3};
varuniqueData=dataSource.Distinct();
Console.WriteLine(string.Join(",",uniqueData));
}
使用Linq的GroupBy()方法去重
GroupBy()方法将原始集合中的元素进行分组,根据指定的键或条件进行分组。每个分组都会有一个唯一的键,通过将原始集合分组并选择每个分组中的第一个元素,实现了去重的效果。
///
///使用Linq的GroupBy()方法去重
///
publicstaticvoidGroupByDuplicate()
{
vardataSource=newList(){1,2,3,2,5,88,99,99,100,88,30,50,15,100,99,99,2,3};
//GroupBy()方法将原始集合中的元素进行分组,根据指定的键或条件进行分组。每个分组都会有一个唯一的键,通过将原始集合分组并选择每个分组中的第一个元素,实现了去重的效果。
varuniqueData=dataSource.GroupBy(item=>item).Select(group=>group.First()).ToList();
Console.WriteLine(string.Join(",",uniqueData));
}
使用自定义的比较器和循环遍历
publicclassArrayDeduplication
{
///
///使用自定义的比较器和循环遍历
///
publicstaticvoidCustomEqualityComparerDuplicate()
{
vardataSource=newList(){1,2,3,2,5,88,99,99,100,88,30,50,15,100,99,99,2,3};
varuniqueData=newList();
foreach(varitemindataSource)
{
if(!uniqueData.Contains(item,newCustomEqualityComparer()))
{
uniq服务器托管ueData.Add(item);
}
}
Console.WriteLine(string.Join(",",uniqueData));
}
}
///
///自定义的比较器
///
publicclassCustomEqualityComparer:IEqualityComparer
{
publicboolEquals(intx,inty)
{
returnx==y;
}
publicintGetHashCode(intobj)
{
returnobj.GetHashCode();
}
}
直接循环遍历去重
///
///直接循环遍历去重
///
publicstaticvoidLoopTraversalDuplicate()
{
vardataSource=newList(){1,2,3,2,5,88,99,99,100,88,30,50,15,100,99,99,2,3};
varuniqueData=newList();
foreach(varitemindataSource)
{
//if(!uniqueData.Any(x=>x==item))
//if(!uniqueData.Exists(x=>x==item))
if(!uniqueData.Contains(item))
{
uniqueData.Add(item);
}
}
Console.WriteLine(string.Join(",",uniqu服务器托管eData));
}
示例源码
https://github.com/YSGStudyHards/DotNetGuide/blob/main/DotNetGuidePractice/HelloDotNetGuide/%E6%95%B0%E7%BB%84%E7%9B%B8%E5%85%B3/ArrayDeduplication.cs
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net