如何在 C# 中比较两个列表是否相等?

介绍

在 C# 中比较两个列表是否相等是一个常见的操作。比如,在应用程序中可能需要比较数据列表或选项列表是否相同。本文将介绍比较两个列表是否相等的方法,以及如何处理不同类型的列表。

使用 Linq 比较两个列表是否相等

在 C# 中,可以使用 Linq 的 SequenceEqual() 方法来比较两个列表是否相等。这个方法将比较两个列表的每个元素是否相同,并且包含在列表中的元素必须按照相同的顺序排序。

下面的代码片段演示了如何使用 SequenceEqual() 方法比较两个整数列表是否相等:

List<int> list1 = new List<int> {1, 2, 3};

List<int> list2 = new List<int> {1, 2, 3};

bool equal = list1.SequenceEqual(list2); // equal will be true

上面的代码创建了两个包含相同元素的整数列表,并将它们传递给 SequenceEqual() 方法。方法将比较列表的元素是否相同,并返回一个布尔值表明两个列表是否相同。

处理无序列表的相等性比较

如果要比较两个无序列表的相等性,可以使用 Linq 的 Except() 方法。这个方法将返回第一个列表中不包含在第二个列表中的元素,然后将结果与第二个列表合并。如果结果是空的,那么两个列表就是相等的。

下面的代码片段演示了如何使用 Except() 方法比较两个无序整数列表是否相等:

List<int> list3 = new List<int> {3, 2, 1};

List<int> list4 = new List<int> {1, 2, 3};

bool equal2 = !list3.Except(list4).Any(); // equal will be true

上面的代码创建了两个包含相同元素的无序整数列表,并使用 Except() 方法在两个列表之间进行比较。方法将找到列表 3 中的所有元素,这些元素不包含在列表 4 中,然后将它们合并。最后,使用 Any() 方法来演示结果是否为空。

处理泛型列表的相等性比较

如果要比较两个泛型列表的相等性,可以使用 Linq 的自定义比较器。这可以通过创建一个实现 IEqualityComparer 接口的类来完成,并且可以在 Linq 方法中使用该类。

下面的代码片段展示了如何使用自定义比较器比较两个包含自定义 Person 对象的泛型列表是否相等:

class Person

{

public string Name { get; set; }

public int Age { get; set; }

}

class PersonEqualityComparer : IEqualityComparer<Person>

{

public bool Equals(Person x, Person y)

{

return x.Name == y.Name && x.Age == y.Age;

}

public int GetHashCode(Person obj)

{

return obj.Name.GetHashCode() ^ obj.Age.GetHashCode();

}

}

List<Person> list5 = new List<Person>

{

new Person { Name = "John", Age = 24 },

new Person { Name = "Jane", Age = 25 },

new Person { Name = "Jake", Age = 26 }

};

List<Person> list6 = new List<Person>

{

new Person { Name = "John", Age = 24 },

new Person { Name = "Jane", Age = 25 },

new Person { Name = "Jake", Age = 26 }

};

bool equal3 = list5.SequenceEqual(list6, new PersonEqualityComparer()); // equal will be true

在上面的代码中,创建了一个包含自定义 Person 对象的泛型列表,并为 Person 对象创建了自定义比较器。SequnceEqual() 方法使用自定义比较器来比较两个列表是否相等。

结论

以上是比较两个列表是否相等的方法,包括使用 SequenceEqual() 方法比较有序列表,使用 Except() 方法比较无序列表,以及使用自定义比较器比较泛型列表。在 C# 中比较列表的相等性应该是一个第一步操作,在数据列表或选项列表等方面的应用程序中。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签