📌  相关文章
📜  C# 具有组和计数的唯一值列表 - C# (1)

📅  最后修改于: 2023-12-03 15:13:50.577000             🧑  作者: Mango

C# 具有组和计数的唯一值列表

在C#中,有时我们需要计算列表中的唯一值数量,同时我们希望按照特定的方式组织这些唯一值。这可以通过使用Linq进行实现。

代码示例

下面是一个示例代码段,其中包含一个字符串列表,将这个列表中的单词按照首字母进行分组,并计算每个组中唯一单词的数量。

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        List<string> words = new List<string> {"apple", "banana", "cat", "dog", "elephant"};

        var groups = words.GroupBy(w => w[0]);

        foreach(var group in groups)
        {
            Console.WriteLine("Words that start with {0}:", group.Key);
            foreach(var word in group.Distinct())
            {
                Console.WriteLine("\t{0}", word);
            }
            Console.WriteLine("Total unique word count: {0}", group.Distinct().Count());
        }

        Console.ReadKey();
    }
}

运行上面的代码,将会得到如下的输出结果:

Words that start with a:
        apple
Total unique word count: 1
Words that start with b:
        banana
Total unique word count: 1
Words that start with c:
        cat
Total unique word count: 1
Words that start with d:
        dog
Total unique word count: 1
Words that start with e:
        elephant
Total unique word count: 1
分析

代码中,我们首先创建了一个字符串列表 words,然后使用 GroupBy 方法将这个列表中的字符串按照首字母进行分组,保存到 groups 变量中。

GroupBy 方法返回的是一个IEnumerable<Grouping<TKey,TElement>>,其中 Grouping 是实现了 IEnumerable<TElement> 接口以及 IGrouping<TKey,TElement> 接口的类。每个 Grouping<TKey,TElement> 对象都表示了一个具有相同键的元素集合。

然后,我们在一个循环中遍历每一个分组,并对其中的元素进行去重。为了实现元素去重,我们使用 Distinct 方法,该方法返回一个无序序列,其中包含所有不同的元素。

最后,我们输出分组的唯一单词的数量。

总结

通过使用C#中的Linq,我们可以非常方便地对列表中的元素进行分组和计数。Linq 内置了很多强大的方法,如 GroupByDistinct,使得我们可以快速地实现这些功能。