เมธอด IsSubsetOf(IEnumerable<T> other) ของ SortedSet<T> คืนค่า true หาก SortedSet ปัจจุบันมีองค์ประกอบ **ทั้งหมดอยู่ใน other** (อาจเท่ากันได้) - คือ Subset (A ⊆ B)
ตัวอย่างที่ 1: SortedSet1 เป็น Subset ของ SortedSet2
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
SortedSet<string> set1 = new SortedSet<string>();
set1.Add("AB");
set1.Add("BC");
set1.Add("CD");
set1.Add("EF");
Console.WriteLine("องค์ประกอบใน SortedSet1...");
foreach (string res in set1)
{
Console.WriteLine(res);
}
SortedSet<string> set2 = new SortedSet<string>();
set2.Add("BC");
set2.Add("CD");
set2.Add("DE");
set2.Add("EF");
set2.Add("AB");
set2.Add("HI");
set2.Add("JK");
Console.WriteLine("องค์ประกอบใน SortedSet2...");
foreach (string res in set2)
{
Console.WriteLine(res);
}
// set1 = {AB, BC, CD, EF} ทุกตัวอยู่ใน set2 -> Subset
Console.WriteLine("SortedSet1 เป็น Subset ของ SortedSet2? = " + set1.IsSubsetOf(set2));
}
}
ผลลัพธ์ (เรียงลำดับอัตโนมัติ)
องค์ประกอบใน SortedSet1... AB BC CD EF องค์ประกอบใน SortedSet2... AB BC CD DE EF HI JK SortedSet1 เป็น Subset ของ SortedSet2? = True
ตัวอย่างที่ 2: Subset ที่มีค่าซ้ำในต้นทาง (ถูกกรอง)
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
SortedSet<string> set1 = new SortedSet<string>();
set1.Add("CD");
set1.Add("CD"); // ซ้ำ
set1.Add("CD"); // ซ้ำ
set1.Add("CD"); // ซ้ำ
// set1 จริงมีแค่ {CD}
Console.WriteLine("องค์ประกอบใน SortedSet1...");
foreach (string res in set1)
{
Console.WriteLine(res);
}
SortedSet<string> set2 = new SortedSet<string>();
set2.Add("BC");
set2.Add("CD");
set2.Add("DE");
set2.Add("EF");
set2.Add("AB");
set2.Add("HI");
set2.Add("JK");
Console.WriteLine("องค์ประกอบใน SortedSet2...");
foreach (string res in set2)
{
Console.WriteLine(res);
}
// set1 = {CD} อยู่ใน set2 -> Subset
Console.WriteLine("SortedSet1 เป็น Subset ของ SortedSet2? = " + set1.IsSubsetOf(set2));
}
}
ผลลัพธ์
องค์ประกอบใน SortedSet1... CD องค์ประกอบใน SortedSet2... AB BC CD DE EF HI JK SortedSet1 เป็น Subset ของ SortedSet2? = True
ตารางเปรียบเทียบ Subset/Superset
| เมธอด | สัญลักษณ์ | ความหมาย | A={1,2}, B={1,2,3} |
|---|---|---|---|
IsSubsetOf | A ⊆ B | A เป็นสับเซตของ B (อาจเท่ากันได้) | True |
IsProperSubsetOf | A ⊂ B | A โพรเพอร์สับเซต (ต้องไม่เท่ากัน) | True |
IsSupersetOf | A ⊇ B | A ซูเปอร์เซตของ B (อาจเท่ากันได้) | False |
IsProperSupersetOf | A ⊃ B | A โพรเพอร์ซูเปอร์เซต (ต้องไม่เท่ากัน) | False |
SetEquals | A = B | สมาชิกเหมือนกันทุกตัว | False |
Overlaps | A ∩ B ≠ ∅ | มีสมาชิกร่วม ≥ 1 | True |
ข้อสังเกต
- Subset (IsSubsetOf) รวมถึงกรณีเท่ากัน (A = B → True)
- Proper Subset (IsProperSubsetOf) ต้องมีสมาชิกน้อยกว่า (A = B → False)
- SortedSet ใช้ Red-Black Tree รักษาลำดับเรียงอัตโนมัติ
- เมธอดเหล่านี้รับ
IEnumerable<T>ใดๆ ก็ได้ (List, Array, HashSet, SortedSet) - Complexity: O(n log m) โดยประมาณ (n = this.Count, m = other.Count) เนื่องจาก Contains เป็น O(log m)
- HashSet เร็วกว่าสำหรับ Contains (O(1)) แต่ไม่เรียงลำดับ