📅  最后修改于: 2023-12-03 15:00:14.816000             🧑  作者: Mango
C# 中的 SortedSet
和 HashSet
都是实现了集合的数据结构。在实际开发中,我们可能需要计算两个集合的交集,即找出在两个集合中都存在的元素。
本文将介绍如何使用 SortedSet
和 HashSet
两种集合实现求交集的操作。
我们先来看如何创建一个 SortedSet
。SortedSet
可以使用无参构造函数创建:
SortedSet<int> set = new SortedSet<int>();
当然,我们也可以在创建时添加元素:
SortedSet<int> set = new SortedSet<int>(new int[] { 1, 2, 3 });
要求两个 SortedSet
的交集,我们可以使用 IntersectWith
方法。该方法对当前的 SortedSet
进行修改,只保留在两个集合中都存在的元素。
下面的示例演示了如何找出两个 SortedSet
的交集:
SortedSet<int> set1 = new SortedSet<int>(new int[] { 1, 2, 3 });
SortedSet<int> set2 = new SortedSet<int>(new int[] { 2, 3, 4 });
set1.IntersectWith(set2);
foreach (int num in set1) {
Console.WriteLine(num); // 输出 2 和 3
}
我们可以使用 Overlaps
方法判断两个 SortedSet
是否有交集。该方法返回一个 bool
值,表示当前 SortedSet
和另一个集合是否有交集。
以下示例演示了如何判断两个 SortedSet
是否有交集:
SortedSet<int> set1 = new SortedSet<int>(new int[] { 1, 2, 3 });
SortedSet<int> set2 = new SortedSet<int>(new int[] { 4, 5, 6 });
if (set1.Overlaps(set2)) {
Console.WriteLine("有交集");
} else {
Console.WriteLine("无交集"); // 输出无交集
}
创建一个 HashSet
很简单,我们只需要使用无参构造函数或在创建时添加元素就可以了。
HashSet<int> set = new HashSet<int>();
// 或者
HashSet<int> set = new HashSet<int>(new int[] { 1, 2, 3 });
要求两个 HashSet
的交集,我们可以使用 IntersectWith
方法。
下面的示例演示了如何找出两个 HashSet
的交集:
HashSet<int> set1 = new HashSet<int>(new int[] { 1, 2, 3 });
HashSet<int> set2 = new HashSet<int>(new int[] { 2, 3, 4 });
set1.IntersectWith(set2);
foreach (int num in set1) {
Console.WriteLine(num); // 输出 2 和 3
}
我们可以使用 Overlaps
方法判断两个 HashSet
是否有交集。该方法返回一个 bool
值,表示当前 HashSet
和另一个集合是否有交集。
以下示例演示了如何判断两个 HashSet
是否有交集:
HashSet<int> set1 = new HashSet<int>(new int[] { 1, 2, 3 });
HashSet<int> set2 = new HashSet<int>(new int[] { 4, 5, 6 });
if (set1.Overlaps(set2)) {
Console.WriteLine("有交集");
} else {
Console.WriteLine("无交集"); // 输出无交集
}
本文介绍了如何使用 SortedSet
和 HashSet
两种集合实现求交集的操作。
对于小规模数据,我们可以使用 SortedSet
,它提供了丰富的方法,并且在插入和查找操作中具有比 HashSet
更好的性能。但对于大规模数据,HashSet
的性能会更优秀。