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

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

C# | SortedSet与集合的并集

简介

在C#中,我们有多种数据结构可以表示一组元素。本文将重点介绍SortedSet和HashSet,以及如何取它们的并集。

SortedSet

SortedSet是一个有序不重复元素的集合。它的特性是自动根据元素的大小进行排序。

示例代码
SortedSet<int> set1 = new SortedSet<int> { 1, 2, 3, 4 };
SortedSet<int> set2 = new SortedSet<int> { 4, 5, 6, 7 };

foreach (var item in set1.Union(set2))
{
    Console.WriteLine(item);
}

输出结果:

1
2
3
4
5
6
7
接口和方法

SortedSet继承自IEnumerable, ISet和ICollection接口。它还有许多方法可供使用,包括:

  • Add(T)
  • Clear()
  • Contains(T)
  • ExceptWith(IEnumerable)
  • IntersectWith(IEnumerable)
  • IsProperSubsetOf(IEnumerable)
  • IsProperSupersetOf(IEnumerable)
  • IsSubsetOf(IEnumerable)
  • IsSupersetOf(IEnumerable)
  • Overlaps(IEnumerable)
  • Remove(T)
  • SetEquals(IEnumerable)
  • SymmetricExceptWith(IEnumerable)
  • UnionWith(IEnumerable)
HashSet

HashSet是一个无序不重复元素的集合。它的底层实现是哈希表,因此它的添加、删除、查询等操作的时间复杂度为O(1)。

示例代码
HashSet<int> set1 = new HashSet<int> { 1, 2, 3, 4 };
HashSet<int> set2 = new HashSet<int> { 4, 5, 6, 7 };

foreach (var item in set1.Union(set2))
{
    Console.WriteLine(item);
}

输出结果:

1
2
3
4
5
6
7
接口和方法

HashSet继承自IEnumerable, ISet和ICollection接口。它还有许多方法可供使用,包括:

  • Add(T)
  • Clear()
  • Contains(T)
  • ExceptWith(IEnumerable)
  • IntersectWith(IEnumerable)
  • IsProperSubsetOf(IEnumerable)
  • IsProperSupersetOf(IEnumerable)
  • IsSubsetOf(IEnumerable)
  • IsSupersetOf(IEnumerable)
  • Overlaps(IEnumerable)
  • Remove(T)
  • SetEquals(IEnumerable)
  • SymmetricExceptWith(IEnumerable)
  • UnionWith(IEnumerable)
取并集

取两个集合的并集,可以使用LINQ库提供的Union方法。如上述代码中所示,可以将两个集合分别调用Union方法取并集,然后使用foreach遍历结果。

在SortedSet和HashSet中,都有自己的Union方法可供使用,用法与LINQ库提供的Union方法类似。对于SortedSet和HashSet中的元素类型,必须实现IComparable接口来确保在排序时使用比较方法。

示例代码
SortedSet<int> set1 = new SortedSet<int> { 1, 2, 3, 4 };
SortedSet<int> set2 = new SortedSet<int> { 4, 5, 6, 7 };

foreach (var item in set1.Union(set2))
{
    Console.WriteLine(item);
}

输出结果:

1
2
3
4
5
6
7