当前位置:首页 > 行业动态 > 正文

c# 去重复存储

在C#中,可以使用HashSet来去重存储数据。

C#中,去重复存储是一个常见的需求,尤其是在处理大量数据时,以下是一些常用的方法来实现这一目标:

一、使用HashSet去重

1、原理HashSet<T>是C#中的一个集合类,它不允许存储重复的元素,通过将元素添加到HashSet中,可以自动去除重复的元素。

2、示例代码

using System;
using System.Collections.Generic;
class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 3, 2, 1 };
        HashSet<int> uniqueNumbers = new HashSet<int>(numbers);
        Console.WriteLine("去重后的数字列表:");
        foreach (var number in uniqueNumbers)
        {
            Console.WriteLine(number);
        }
    }
}

在这个示例中,我们创建了一个包含重复数字的列表numbers,然后将其传递给HashSet<int>的构造函数来去重,我们遍历uniqueNumbers并打印出每个唯一的数字。

二、使用LINQ的Distinct方法

1、原理:Language Integrated Query (LINQ)是C#中用于数据查询和操作的语言集成查询功能。Distinct方法是LINQ提供的一个方法,它可以返回一个序列中的唯一元素。

2、示例代码

using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 3, 2, 1 };
        IEnumerable<int> uniqueNumbers = numbers.Distinct();
        Console.WriteLine("去重后的数字列表:");
        foreach (var number in uniqueNumbers)
        {
            Console.WriteLine(number);
        }
    }
}

在这个示例中,我们使用了Distinct方法来获取numbers列表中的唯一元素,注意,Distinct方法返回的是一个IEnumerable<T>类型的对象,因此我们需要遍历它来访问每个唯一的元素。

三、使用Dictionary去重(适用于需要保留顺序的场景)

1、原理Dictionary<TKey, TValue>是C#中的另一个集合类,它存储键值对并且不允许有重复的键,我们可以利用这个特性来去除重复的元素,同时保留元素的插入顺序。

2、示例代码

using System;
using System.Collections.Generic;
class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 3, 2, 1 };
        Dictionary<int, bool> uniqueNumbers = new Dictionary<int, bool>();
        foreach (var number in numbers)
        {
            if (!uniqueNumbers.ContainsKey(number))
            {
                uniqueNumbers.Add(number, true);
            }
        }
        Console.WriteLine("去重后的数字列表:");
        foreach (var key in uniqueNumbers.Keys)
        {
            Console.WriteLine(key);
        }
    }
}

在这个示例中,我们创建了一个Dictionary<int, bool>来存储唯一的数字,我们遍历numbers列表中的每个数字,并检查它是否已经存在于字典中,如果不存在,我们就将它添加到字典中,我们遍历字典的键并打印出每个唯一的数字。

三种方法各有优缺点,选择哪种方法取决于具体的应用场景和需求,如果不需要保留元素的插入顺序并且希望获得最佳性能,可以选择使用HashSetDistinct方法;如果需要保留元素的插入顺序并且希望获得更好的性能,可以选择使用Dictionary方法。