下面是关于C# Linq中Except()方法的详细攻略:
1. Except()方法概述
Except()是C# Linq中的一个拓展方法,用来求两个集合的差集。它返回的结果是一个集合,包含第一个集合中不包含在第二个集合中的元素。该方法的语法为:
public static IEnumerable<TSource> Except<TSource>(
this IEnumerable<TSource> first,
IEnumerable<TSource> second);
其中,参数first和second分别表示要进行差集操作的两个集合。除此之外,我们还可以指定一个可选的IEqualityComparer
2. Except()方法示例
下面通过两个具体的例子,来进一步说明Except()方法的使用。
2.1 示例1:求两个数组的差集
我们先定义两个整数类型的数组a和b,并初始化它们:
int[] a = { 1, 2, 3, 4, 5 };
int[] b = { 4, 5, 6, 7, 8 };
现在,我们可以直接使用Except()方法来求a和b的差集:
var result = a.Except(b);
执行上述代码后,result的值将是一个整数类型的集合,包含了a中不包含在b中的元素,即:{1, 2, 3}。
2.2 示例2:指定元素比较器
下面,我们来看一个更为复杂的例子。假设我们有一个字符串类型的集合words,里面包含了一些单词。现在,我们要求出这个集合中去掉所有前缀为”pre-“的单词之后,不重复的单词有多少个。注意,这里不区分大小写。
首先,我们需要定义一个元素比较器。由于我们要不区分大小写地比较字符串,因此可以使用StringComparer类的IgnoreCase选项来创建一个忽略大小写的比较器:
var comparer = StringComparer.OrdinalIgnoreCase;
接下来,我们来创建words集合,并初始化它的元素:
string[] words = { "PREtext", "something", "pretext", "another", "pre-position", "else" };
现在,我们可以使用Linq语句来对words进行过滤和去重:
var result = words
.Where(w => !w.StartsWith("pre-", StringComparison.OrdinalIgnoreCase)) // 过滤掉前缀为"pre-"的单词
.Select(w => w.ToLower()) // 转换为小写字母
.Distinct(comparer); // 去重,不区分大小写
最后,我们来统计一下result中的元素个数即可:
int count = result.Count();
执行上述代码后,count的值将是2,即去掉前缀为”pre-“后,不重复的单词个数有2个。
这样,以上就是关于C# Linq Except()方法的完整攻略了。