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

ตรวจสอบว่า SortedSet สองชุดเท่ากันหรือไม่ใน C#

บทความนี้สาธิตวิธีตรวจสอบว่า SortedSet<T> สองชุดมีสมาชิกเท่ากันหรือไม่ โดยใช้เมธอด Equals() และ SetEquals() ใน C#

ตัวอย่างที่ 1: เปรียบเทียบ SortedSet ที่มีสมาชิกเหมือนกัน

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main()
    {
        SortedSet<int> set1 = new SortedSet<int>();
        set1.Add(100);
        set1.Add(200);
        set1.Add(300);
        set1.Add(400);

        Console.WriteLine("Elements in SortedSet1...");
        foreach (int res in set1)
        {
            Console.WriteLine(res);
        }

        Console.WriteLine("Does the SortedSet1 contains the element 400? = " + set1.Contains(400));

        SortedSet<int> set2 = new SortedSet<int>();
        set2.Add(100);
        set2.Add(200);
        set2.Add(300);
        set2.Add(400);

        Console.WriteLine("Elements in SortedSet2...");
        foreach (int res in set2)
        {
            Console.WriteLine(res);
        }

        Console.WriteLine("Does the SortedSet2 contains the element 500? = " + set2.Contains(500));
        Console.WriteLine("Are both the sets equal? = " + set1.Equals(set2));
    }
}

ผลลัพธ์

Elements in SortedSet1...
100
200
300
400
Does the SortedSet1 contains the element 400? = True
Elements in SortedSet2...
100
200
300
400
Does the SortedSet2 contains the element 500? = False
Are both the sets equal? = False

ตัวอย่างที่ 2: กรณีอ้างอิงชี้ไปยังออบเจ็กต์เดียวกัน

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main()
    {
        SortedSet<int> set1 = new SortedSet<int>();
        set1.Add(10);
        set1.Add(15);
        set1.Add(30);
        set1.Add(50);
        set1.Add(75);
        set1.Add(100);
        set1.Add(150);

        Console.WriteLine("Elements in SortedSet1...");
        foreach (int res in set1)
        {
            Console.WriteLine(res);
        }

        Console.WriteLine("Does the SortedSet1 contains the element 400? = " + set1.Contains(400));

        SortedSet<int> set2 = new SortedSet<int>();
        set2.Add(25);
        set2.Add(50);
        set2.Add(100);
        set2.Add(200);
        set2.Add(400);
        set2.Add(500);

        Console.WriteLine("Elements in SortedSet2...");
        foreach (int res in set2)
        {
            Console.WriteLine(res);
        }

        set2 = set1; // ชี้ไปยังออบเจ็กต์เดียวกัน
        Console.WriteLine("Are both the sets equal? = " + set1.Equals(set2));
    }
}

ผลลัพธ์

Elements in SortedSet1...
10
15
30
50
75
100
150
Does the SortedSet1 contains the element 400? = False
Elements in SortedSet2...
25
50
100
200
400
500
Are both the sets equal? = True

สรุปและข้อสังเกตสำคัญ

  • เมธอด Equals() ของ SortedSet เปรียบเทียบแบบ reference equality (อ้างอิง) ไม่ใช่ value equality (ค่า) — จะคืนค่า true ก็ต่อเมื่อทั้งสองตัวแปรชี้ไปยังออบเจ็กต์เดียวกันเท่านั้น
  • เมธอด SetEquals() คือวิธีที่ถูกต้องสำหรับเปรียบเทียบเนื้อหา (value equality) — คืนค่า true หากทั้งสองชุดมีสมาชิกเหมือนกันทุกตัว
  • SortedSet จัดเก็บข้อมูลเรียงลำดับอัตโนมัติและไม่ซ้ำกัน (unique)
  • ใช้ Contains() เพื่อตรวจสอบสมาชิกเฉพาะ

ตัวอย่างการใช้ SetEquals() ให้ถูกต้อง

SortedSet<int> set1 = new SortedSet<int> { 100, 200, 300, 400 };
SortedSet<int> set2 = new SortedSet<int> { 100, 200, 300, 400 };

bool areEqual = set1.SetEquals(set2); // คืนค่า true
Console.WriteLine("Sets are equal (content): " + areEqual);