C# Linq的SequenceEqual()方法 – 确定两个序列是否相等

  • Post category:C#

SequenceEqual()是LINQ中一个非常有用的方法,它用于比较两个序列是否相等。该方法返回一个布尔值,指示两个序列是否具有相同的元素,以及它们是否处于相同的顺序。下面我将为你提供一个完整攻略,让你学会如何使用SequenceEqual()方法。

SequenceEqual()方法的语法

该方法的语法如下:

public static bool SequenceEqual<TSource>(this IEnumerable<TSource> source1, IEnumerable<TSource> source2);

其中,source1和source2是要比较的两个序列,TSource是序列中的元素类型。该方法返回一个布尔值,指示两个序列是否相等。

SequenceEqual()方法的示例

下面是两个使用SequenceEqual()方法进行比较的示例:

示例1:对比两个整数数组

下面的示例演示了对比两个整数数组是否相等:

int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = {1, 2, 3, 4, 5};
bool isEqual = arr1.SequenceEqual(arr2);
Console.WriteLine($"两个数组是否相等:{isEqual}");

输出结果如下:

两个数组是否相等:True

在上面的示例中,我们首先声明了两个整数数组arr1和arr2。然后,我们使用SequenceEqual()方法比较这两个数组。因为这两个数组具有相同的元素和相同的顺序,所以它们相等,SequenceEqual()方法返回True。

示例2:使用自定义比较器

下面的示例演示了如何使用自定义比较器进行比较:

class MyComparer : IEqualityComparer<string> {
    public bool Equals(string x, string y) {
        return x.EndsWith(y);
    }
    public int GetHashCode(string obj) {
        return obj.GetHashCode();
    }
}

static void Main() {
    string[] arr1 = {"hello", "world", "linq"};
    string[] arr2 = {"o", "d", "q"};
    bool isEqual = arr1.SequenceEqual(arr2, new MyComparer());
    Console.WriteLine($"两个数组是否相等:{isEqual}");
}

输出结果如下:

两个数组是否相等:True

在上面的示例中,我们首先声明了两个字符串数组arr1和arr2,并且定义了一个自定义比较器MyComparer。该比较器的Equals()方法比较两个字符串是否以相同的字符结尾。然后,我们使用SequenceEqual()方法比较arr1和arr2是否相等,并且传递了MyComparer对象作为第二个参数。由于在我们的比较器中规定了以相同字符结尾的字符串是相等的,所以SequenceEqual()方法返回True。

总结

SequenceEqual()方法是用于比较两个序列是否相等的常用方法,它可以用于比较任何类型的序列。需要注意的是,在使用该方法时需要确保两个序列中的元素数量和顺序相同,才能获得正确的比较结果。如果需要自定义比较逻辑,我们可以传递一个实现了IEqualityComparer接口的比较器对象作为参数。