📜  C#| SortedSet与集合的交集(1)

📅  最后修改于: 2023-12-03 15:00:14.816000             🧑  作者: Mango

C# | SortedSet 与集合的交集

C# 中的 SortedSetHashSet 都是实现了集合的数据结构。在实际开发中,我们可能需要计算两个集合的交集,即找出在两个集合中都存在的元素。

本文将介绍如何使用 SortedSetHashSet 两种集合实现求交集的操作。

SortedSet
创建 SortedSet

我们先来看如何创建一个 SortedSetSortedSet 可以使用无参构造函数创建:

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

创建一个 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("无交集");    // 输出无交集
}
总结

本文介绍了如何使用 SortedSetHashSet 两种集合实现求交集的操作。

对于小规模数据,我们可以使用 SortedSet,它提供了丰富的方法,并且在插入和查找操作中具有比 HashSet 更好的性能。但对于大规模数据,HashSet 的性能会更优秀。