บทความนี้สาธิตวิธีตรวจสอบว่า 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);