下面是使用LINQ计算执行元素在列表中出现次数的方法的完整攻略。
标题
C#使用LINQ计算执行元素在列表中出现次数的方法
内容
一般来说,计算元素在列表中出现的次数是一个很常见的需求,下面我们就介绍如何使用LINQ对列表进行查询,以计算元素在列表中出现的次数。
1. 使用GroupBy方法进行分组
要计算元素在列表中出现的次数,我们可以通过先将列表按照元素进行分组,再统计每个分组中元素的个数来实现。这个过程可以通过LINQ的GroupBy方法和Count方法来完成。
示例代码如下:
var list = new List<string> { "apple", "banana", "orange", "apple", "pear", "orange", "banana" };
var grouped = list.GroupBy(x => x);
foreach (var group in grouped)
{
Console.WriteLine($"{group.Key} appears {group.Count()} times");
}
输出结果如下:
apple appears 2 times
banana appears 2 times
orange appears 2 times
pear appears 1 times
2. 使用ToLookup方法进行分组
除了使用GroupBy方法进行分组,我们还可以使用ToLookup方法进行分组,这个方法返回的是一个ILookup
示例代码如下:
var list = new List<string> { "apple", "banana", "orange", "apple", "pear", "orange", "banana" };
var lookup = list.ToLookup(x => x);
foreach (var group in lookup)
{
Console.WriteLine($"{group.Key} appears {group.Count()} times");
}
输出结果和上面的示例相同。不同之处是,使用ToLookup方法可以直接将结果保存为一个ILookup对象,方便后续的查询操作。
3. 自定义比较器进行分组
有时候,我们需要按照某种特定方式进行比较来分组。这个时候,我们可以使用GroupBy或ToLookup方法的重载版本,指定一个自定义的比较器。比如,下面的示例中,我们按照字符串长度来进行分组:
var list = new List<string> { "apple", "banana", "orange", "apple", "pear", "orange", "banana" };
var grouped = list.GroupBy(x => x, new StringLengthComparer());
foreach (var group in grouped)
{
Console.WriteLine($"Strings with length {group.Key} appears {group.Count()} times");
}
public class StringLengthComparer : IEqualityComparer<string>
{
public bool Equals(string x, string y)
{
if (x == null || y == null)
return x == y;
return x.Length == y.Length;
}
public int GetHashCode(string obj)
{
if (obj == null)
return 0;
return obj.Length.GetHashCode();
}
}
输出结果如下:
Strings with length 5 appears 5 times
Strings with length 6 appears 2 times
通过指定自定义的比较器,我们实现了按照字符串长度分组的功能。
以上就是使用LINQ计算元素在列表中出现次数的方法的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#使用linq计算执行元素在列表中出现次数的方法 - Python技术站