LINQ基础之Intersect、Except和Distinct子句
在LINQ中,Intersect
、Except
和Distinct
都是集合操作符,用于将两个或多个集合进行相应的操作,并返回相应的结果集。
Distinct子句
Distinct
操作符用于从序列中过滤重复的元素,只保留第一个出现的元素。例如:
var numbers = new [] { 1, 2, 3, 2, 4, 1 };
var distinctNumbers = numbers.Distinct();
// 结果集:1, 2, 3, 4
在上面的示例中,numbers
数组中包含重复的数字1和2,但是在经过Distinct
操作之后,只保留了每个数字第一次出现的元素,得到了不重复的数字集合。
需要注意的是,在进行Distinct
操作时,需要保证集合中的元素实现了GetHashCode
和Equals
方法,以便操作符能够判断集合中的元素是否相等。
Intersect子句
Intersect
操作符用于获取两个集合的交集,并返回结果集合。例如:
var numbers1 = new [] { 1, 2, 3, 4, 5 };
var numbers2 = new [] { 3, 4, 5, 6, 7 };
var intersectNumbers = numbers1.Intersect(numbers2);
// 结果集:3, 4, 5
在上面的示例中,numbers1
和numbers2
两个集合都包含数字3、4、5,经过Intersect
操作之后,返回包含这三个数字的集合作为结果集。
需要注意的是,进行Intersect
操作时,集合中的元素需要实现GetHashCode
和Equals
方法。
Except子句
Except
操作符用于返回source
集合中没有出现在other
集合中的元素集合。例如:
var numbers1 = new [] { 1, 2, 3, 4 };
var numbers2 = new [] { 3, 4, 5, 6 };
var exceptNumbers = numbers1.Except(numbers2);
// 结果集:1, 2
在上面的示例中,numbers1
和numbers2
两个集合共包含4个数字3和4,通过Except
操作符得到numbers1
集合中没有出现在numbers2
集合中的数字1和2。
需要注意的是,进行Except
操作时,集合中的元素需要实现GetHashCode
和Equals
方法。
综合示例
下面的示例演示了如何同时使用这三个操作符,从两个数据集中获取不重复的数字,并计算这些数字的平均值:
var numbers1 = new [] { 1, 2, 3, 4 };
var numbers2 = new [] { 3, 4, 5, 6 };
var distinctNumbers = numbers1.Union(numbers2).Distinct();
var average = distinctNumbers.Average();
Console.WriteLine($"不重复数字集合平均值:{average}");
在上面的示例中,首先使用Union
操作符将numbers1
和numbers2
两个集合进行合并,然后使用Distinct
操作符得到不重复的数字集合,最后通过Average
操作符得到不重复数字集合的平均值。
通过这个示例,可以看到如何使用Union
、Distinct
操作符得到不重复的数字集合,以及如何计算集合中数字的平均值。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:LINQ基础之Intersect、Except和Distinct子句 - Python技术站