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

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

เมธอด 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}
IsSubsetOfA ⊆ BA เป็นสับเซตของ B (อาจเท่ากันได้)True
IsProperSubsetOfA ⊂ BA โพรเพอร์สับเซต (ต้องไม่เท่ากัน)True
IsSupersetOfA ⊇ BA ซูเปอร์เซตของ B (อาจเท่ากันได้)False
IsProperSupersetOfA ⊃ BA โพรเพอร์ซูเปอร์เซต (ต้องไม่เท่ากัน)False
SetEqualsA = BสมาชิกเหมือนกันทุกตัวFalse
OverlapsA ∩ B ≠ ∅มีสมาชิกร่วม ≥ 1True

ข้อสังเกต

  • 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)) แต่ไม่เรียงลำดับ