เมธอด IsSupersetOf(IEnumerable<T> other) ของ HashSet<T> คืนค่า true หาก HashSet ปัจจุบันมีองค์ประกอบ **ครบถ้วนของ other** (อาจมีเพิ่มเติมได้) - คือ Superset (A ⊇ B)
ตัวอย่างที่ 1: HashSet<string> เป็น Superset
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
HashSet<string> set1 = new HashSet<string>();
set1.Add("AB");
set1.Add("CD");
set1.Add("EF");
set1.Add("AB"); // ซ้ำ
set1.Add("IJ");
set1.Add("KL");
set1.Add("EF"); // ซ้ำ
set1.Add("OP");
Console.WriteLine("องค์ประกอบใน HashSet1:");
foreach (string val in set1)
{
Console.WriteLine(val);
}
HashSet<string> set2 = new HashSet<string>();
set2.Add("EF");
set2.Add("KL");
Console.WriteLine("องค์ประกอบใน HashSet2:");
foreach (string val in set2)
{
Console.WriteLine(val);
}
// set1 มี EF, KL และมีเพิ่ม -> Superset
Console.WriteLine("set1 เป็น Superset ของ set2? " + set1.IsSupersetOf(set2));
}
}
ผลลัพธ์
องค์ประกอบใน HashSet1
AB
CD
EF
IJ
KL
OP
องค์ประกอบใน HashSet2
EF
KL
set1 เป็น Superset ของ set2? True
ตัวอย่างที่ 2: HashSet ไม่ใช่ Superset
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
HashSet<string> set1 = new HashSet<string>();
set1.Add("IJ");
set1.Add("KL");
set1.Add("EF");
set1.Add("OP");
Console.WriteLine("องค์ประกอบใน HashSet1:");
foreach (string val in set1)
{
Console.WriteLine(val);
}
HashSet<string> set2 = new HashSet<string>();
set2.Add("KL");
set2.Add("MN");
set2.Add("OP");
set2.Add("QR");
Console.WriteLine("องค์ประกอบใน HashSet2:");
foreach (string val in set2)
{
Console.WriteLine(val);
}
// set1 ไม่มี MN, QR -> ไม่ใช่ Superset
Console.WriteLine("set1 เป็น Superset ของ set2? " + set1.IsSupersetOf(set2));
}
}
ผลลัพธ์
องค์ประกอบใน HashSet1
IJ
KL
EF
OP
องค์ประกอบใน HashSet2
KL
MN
OP
QR
set1 เป็น Superset ของ set2? False
ตารางเปรียบเทียบ Set Operations (HashSet & SortedSet)
| เมธอด | สัญลักษณ์ | ความหมาย | A={1,2,3}, B={1,2} |
IsSubsetOf | A ⊆ B | A เป็นสับเซตของ B | False |
IsProperSubsetOf | A ⊂ B | A โพรเพอร์สับเซต (≠) | False |
IsSupersetOf | A ⊇ B | A ซูเปอร์เซตของ B (รวมเท่ากัน) | True |
IsProperSupersetOf | A ⊃ B | A โพรเพอร์ซูเปอร์เซต (≠) | True |
Overlaps | A ∩ B ≠ ∅ | มีสมาชิกร่วม ≥ 1 | True |
SetEquals | A = B | สมาชิกเหมือนกันหมด | False |
เมธอดแก้ไขเซต (Mutating) - In-Place
| เมธอด | คำอธิบาย | Set Operation |
UnionWith | รวม (A ∪ B) | A = A ∪ B |
IntersectWith | เก็บร่วม (A ∩ B) | A = A ∩ B |
ExceptWith | ลบที่อยู่ใน B (A \ B) | A = A \ B |
SymmetricExceptWith | เก็บเฉพาะฝั่งเดียว (A Δ B) | A = (A \ B) ∪ (B \ A) |
ข้อสังเกต
IsSupersetOf รับ IEnumerable<T>> ใดๆ ก็ได้ (List, Array, HashSet, SortedSet, v.v.)
- Complexity: O(n) โดยประมาณ (n = ขนาด other) เนื่องจากต้อง Contains ทุกตัว
- HashSet ให้ O(1) Average สำหรับ Contains -> เร็วกว่า SortedSet (O(log n)) สำหรับข้อมูลเยอะ
- SortedSet ให้ลำดับเรียง ฟรี แต่ช้ากว่าเล็กน้อย
- เลือก HashSet สำหรับ Performance, SortedSet สำหรับ Ordered Data