C# Linq Intersect()方法详解
Intersect()方法的定义
Intersect()方法是C# Linq方法之一,用于返回两个序列中共同出现的元素。该方法有两个重载版本,一个是无参数版本,返回两个序列中的重复元素,一个是带有另外一个序列作为参数的版本,返回两个序列中相同的元素。
无参数版本
无参数版本的Intersect()方法用于从两个序列中返回所有重复的元素。
Intersect()方法的基本语法如下:
Enumerable.Intersect<TSource>(IEnumerable<TSource> first, IEnumerable<TSource> second)
其中,first
代表第一个序列,second
代表第二个序列,TSource
表示序列中的元素类型。方法返回一个IEnumerable<TSource>
类型的序列,包含两个序列中的重复元素。
下面是一个无参数版本的Intersect()方法的示例:
var nums1 = new List<int> {1, 2, 3, 4};
var nums2 = new List<int> {3, 4, 5, 6};
var result = nums1.Intersect(nums2);
// 输出:3 4
foreach(var num in result)
{
Console.Write(num + " ");
}
带参数版本
带参数版本的Intersect()方法用于从两个序列中返回相同的元素。
Intersect()方法的带参数语法如下:
Enumerable.Intersect<TSource>(IEnumerable<TSource> first, IEnumerable<TSource> second, IEqualityComparer<TSource> comparer)
其中,first
代表第一个序列,second
代表第二个序列,comparer
是一个实现了IEqualityComparer<TSource>
接口的对象,用于比较元素的相等性。方法返回一个IEnumerable<TSource>
类型的序列,包含两个序列中相同的元素。
下面是一个带参数版本的Intersect()方法的示例:
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public override bool Equals(object obj)
{
if (obj is Person person)
{
return Id.Equals(person.Id);
}
return false;
}
public override int GetHashCode()
{
return Id.GetHashCode();
}
}
var list1 = new List<Person>
{
new Person { Id = 1, Name = "Person1" },
new Person { Id = 2, Name = "Person2" },
new Person { Id = 3, Name = "Person3" },
new Person { Id = 4, Name = "Person4" },
};
var list2 = new List<Person>
{
new Person { Id = 3, Name = "Person3" },
new Person { Id = 4, Name = "Person4" },
new Person { Id = 5, Name = "Person5" },
new Person { Id = 6, Name = "Person6" },
};
var intersectList = list1.Intersect(list2, new PersonComparer());
// 输出:3 Person3 4 Person4
foreach (var item in intersectList)
{
Console.WriteLine($"{item.Id} {item.Name}");
}
public class PersonComparer : IEqualityComparer<Person>
{
public bool Equals(Person x, Person y)
{
return x.Id == y.Id;
}
public int GetHashCode(Person obj)
{
return obj.Id.GetHashCode();
}
}
在这个示例中,两个列表都包含Person
对象。我们自定义了一个PersonComparer
类,它实现了IEqualityComparer<Person>
接口,用于判断两个对象是否相等。通过带参数版本的Intersect()方法,我们将两个列表中的Person
对象进行了比较,并返回了列表中相同的元素。
Intersect应用场景示例
Intersect()方法常用于在两个集合中查找并返回共同出现的元素,例如:
1.查找两个数组中相同的元素:
int[] numArray1 = { 1, 2, 3, 4, 5 };
int[] numArray2 = { 3, 4, 5, 6, 7 };
var result = numArray1.Intersect(numArray2);
foreach (var num in result)
{
Console.WriteLine(num);
}
2.查找两个列表中相同的对象:
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public override bool Equals(object obj)
{
if (obj is Person person)
{
return Id.Equals(person.Id);
}
return false;
}
public override int GetHashCode()
{
return Id.GetHashCode();
}
}
var list1 = new List<Person>
{
new Person { Id = 1, Name = "Person1" },
new Person { Id = 2, Name = "Person2" },
new Person { Id = 3, Name = "Person3" },
new Person { Id = 4, Name = "Person4" },
};
var list2 = new List<Person>
{
new Person { Id = 3, Name = "Person3" },
new Person { Id = 4, Name = "Person4" },
new Person { Id = 5, Name = "Person5" },
new Person { Id = 6, Name = "Person6" },
};
var intersectList = list1.Intersect(list2, new PersonComparer());
foreach (var item in intersectList)
{
Console.WriteLine($"{item.Id} {item.Name}");
}
public class PersonComparer : IEqualityComparer<Person>
{
public bool Equals(Person x, Person y)
{
return x.Id == y.Id;
}
public int GetHashCode(Person obj)
{
return obj.Id.GetHashCode();
}
}
以上就是Intersect()方法的完整攻略,通过这篇介绍,我们可以清楚地了解Intersect()方法及其使用场景。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# Linq的Intersect()方法 – 返回两个序列的交集 - Python技术站