📜  c# 查找重复项 - C# (1)

📅  最后修改于: 2023-12-03 14:39:47.139000             🧑  作者: Mango

C# 查找重复项 - C#

在编程过程中,经常需要查找重复项。在C#中,我们可以使用不同的方法来查找重复项,以便更高效地处理数据。

1. 列表/数组中的重复项

对于一个给定的列表或数组,我们可以使用以下方法来查找重复项:

1.1 使用HashSet
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 1, 2, 3, 4, 4, 5, 6, 7, 7, 8 };
        HashSet<int> duplicates = new HashSet<int>();

        foreach (int number in numbers)
        {
            if (!duplicates.Add(number))
            {
                Console.WriteLine("重复项: " + number);
            }
        }
    }
}

使用HashSet的Add方法将每个元素添加到集合中。如果元素已经存在于集合中,则Add方法返回false,我们可以将其标记为重复项。

1.2 使用LINQ查询
using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 1, 2, 3, 4, 4, 5, 6, 7, 7, 8 };

        var duplicates = numbers.GroupBy(n => n)
                                .Where(g => g.Count() > 1)
                                .Select(g => g.Key);

        foreach (int duplicate in duplicates)
        {
            Console.WriteLine("重复项: " + duplicate);
        }
    }
}

使用LINQ查询语法,我们可以使用GroupBy方法对列表进行分组,并使用Count方法来获取每个分组的数量。然后,我们可以使用Where方法筛选出具有多个重复项的分组,并使用Select方法选择出重复项的值。

2. 字符串中的重复项

对于一个给定的字符串,我们可以使用以下方法来查找重复项:

2.1 使用HashSet
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        string input = "Hello World!";
        HashSet<char> duplicates = new HashSet<char>();

        foreach (char character in input)
        {
            if (!duplicates.Add(character))
            {
                Console.WriteLine("重复字符: " + character);
            }
        }
    }
}

此方法与上面的列表/数组中的方法相似,只是我们将字符串中的每个字符添加到HashSet中以查找重复项。

2.2 使用LINQ查询
using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        string input = "Hello World!";

        var duplicates = input.GroupBy(c => c)
                              .Where(g => g.Count() > 1)
                              .Select(g => g.Key);

        foreach (char duplicate in duplicates)
        {
            Console.WriteLine("重复字符: " + duplicate);
        }
    }
}

这种方法与上面的列表/数组方法类似,我们使用GroupBy方法对字符串中的字符进行分组,并使用Count方法和Where方法来查找重复项。

这些是在C#中查找重复项的一些常见方法。根据不同的需求和数据类型,你可以选择适合你的方法来高效地查找重复项。