📅  最后修改于: 2023-12-03 15:13:50.577000             🧑  作者: Mango
在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 内置了很多强大的方法,如 GroupBy
和 Distinct
,使得我们可以快速地实现这些功能。