C# Linq的Union()操作符
Union()
是 C# Linq 提供的操作符之一,它可以将两个集合合并为一个集合,并且去除重复的元素。它的语法如下:
IEnumerable<TSource> Union<TSource>(
this IEnumerable<TSource> first,
IEnumerable<TSource> second
)
其中,first
和 second
是要合并的两个集合,返回值是一个新的集合,其中包含 first
和 second
的所有元素,但是重复的元素只保留一个。
实例演示
我们通过两个示例来展示 Union()
的使用方法
示例一
在这个例子中,我们通过合并两个整数列表来演示 Union()
的功能。我们定义两个列表:
var list1 = new List<int> { 1, 2, 3 };
var list2 = new List<int> { 2, 3, 4 };
然后我们可以调用 Union()
方法来合并这两个列表。
var result = list1.Union(list2);
result
变量将包含所有的元素,即 1,2,3,4
。
示例二
在这个例子中,我们将使用自定义的数据类型来演示 Union()
的功能。
首先,我们定义一个包含一些 Person
类型对象的 List
:
class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
var list1 = new List<Person>
{
new Person { Id = 1, Name = "张三" },
new Person { Id = 2, Name = "李四" },
new Person { Id = 3, Name = "王五" }
};
接着,我们定义另外一个包含 Person
类型对象的 List
:
var list2 = new List<Person>
{
new Person { Id = 2, Name = "李四" },
new Person { Id = 3, Name = "王五" },
new Person { Id = 4, Name = "赵六" }
};
现在我们有两个不同的 Person
列表,我们想要将它们合并成一个列表,并不重复的元素。
var result = list1.Union(list2, new PersonComparer());
其中,PersonComparer
是我们自己定义的用于比较 Person
对象的类。它实现了 IEqualityComparer<Person>
接口,具体如下:
class PersonComparer : IEqualityComparer<Person>
{
public bool Equals(Person x, Person y)
{
if (Object.ReferenceEquals(x, y))
return true;
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
return false;
return x.Id == y.Id && x.Name == y.Name;
}
public int GetHashCode(Person person)
{
if (Object.ReferenceEquals(person, null))
return 0;
int hashName = person.Name == null ? 0 : person.Name.GetHashCode();
int hashId = person.Id.GetHashCode();
return hashName ^ hashId;
}
}
PersonComparer
类实现了 Equals()
方法和 GetHashCode()
方法,用于比较两个 Person
对象是否相等。接着,我们在 Union
方法中传入 PersonComparer
对象,这样 Union()
操作符就会使用它来比较 Person
对象。
执行以上代码,result
变量将包含所有的人员信息,即 张三,李四,王五,赵六
,并且去除了两个 List
中重复的元素。
结论
Union()
是一个实用的 Linq 操作符,它可以将两个集合合并成一个集合,并且去除重复的元素。在其中,我们可以自定义比较器来比较两个对象是否相等。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# Linq的Union()方法 – 返回两个序列的并集 - Python技术站