Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

ตรวจสอบว่า HashSet เป็น Proper Superset ของคอลเลกชันที่ระบุใน C#

เมธอด IsProperSupersetOf(IEnumerable<T> other) ของ HashSet<T> คืนค่า true หาก HashSet ปัจจุบันมีองค์ประกอบ ครบถ้วนของ other และมีเพิ่มเติมอีกอย่างน้อย 1 ตัว (คือ Superset แต่ไม่เท่ากัน)

ตัวอย่างที่ 1: HashSet<int>

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main()
    {
        HashSet<int> set1 = new HashSet<int>();
        set1.Add(30);
        set1.Add(60);
        set1.Add(70);
        set1.Add(80);
        set1.Add(100);
        set1.Add(125);
        set1.Add(150);
        set1.Add(200);

        Console.WriteLine("องค์ประกอบใน HashSet1:");
        foreach (int val in set1)
        {
            Console.WriteLine(val);
        }

        HashSet<int> set2 = new HashSet<int>();
        set2.Add(30);
        set2.Add(60);
        set2.Add(70);

        Console.WriteLine("องค์ประกอบใน HashSet2:");
        foreach (int val in set2)
        {
            Console.WriteLine(val);
        }

        // set1 มีทุกตัวของ set2 และมีเพิ่ม (80, 100, 125, 150, 200) -> Proper Superset
        Console.WriteLine("set1 เป็น Proper Superset ของ set2? " + set1.IsProperSupersetOf(set2));
    }
}

ผลลัพธ์

องค์ประกอบใน HashSet1
30
60
70
80
100
125
150
200
องค์ประกอบใน HashSet2
30
60
70
set1 เป็น Proper Superset ของ set2? True

ตัวอย่างที่ 2: HashSet<string>

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("GH");
        set1.Add("IJ");
        set1.Add("KL");
        set1.Add("MN");
        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 และมีเพิ่มอีกหลายตัว -> Proper Superset
        Console.WriteLine("set1 เป็น Proper Superset ของ set2? " + set1.IsProperSupersetOf(set2));
    }
}

ผลลัพธ์

องค์ประกอบใน HashSet1
AB
CD
EF
GH
IJ
KL
MN
OP
องค์ประกอบใน HashSet2
EF
KL
set1 เป็น Proper Superset ของ set2? True

ตารางเปรียบเทียบ Subset/Superset

เมธอดความหมายตัวอย่าง A={1,2,3}, B={1,2}
IsSubsetOfA ⊆ B (A เป็นสับเซตของ B)False
IsProperSubsetOfA ⊂ B (A เป็นโพรเพอร์สับเซต - ต้องไม่เท่ากัน)False
IsSupersetOfA ⊇ B (A เป็นซูเปอร์เซตของ B)True
IsProperSupersetOfA ⊃ B (A เป็นโพรเพอร์ซูเปอร์เซต - ต้องไม่เท่ากัน)True
Overlapsมีสมาชิกร่วมกันอย่างน้อย 1 ตัวTrue
SetEqualsA = B (สมาชิกเหมือนกันทุกตัว)False

ข้อสังเกต

  • Proper Superset = Superset ที่ ไม่เท่ากัน (ต้องมีสมาชิกมากกว่า)
  • หาก set1 = {1,2,3}, set2 = {1,2,3} → IsProperSupersetOf คืน false (เพราะเท่ากัน)
  • HashSet ให้ประสิทธิภาพ O(1) สำหรับ Contains, Add, Remove เหมาะสำหรับชุดข้อมูลขนาดใหญ่