Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 두 HybridDictionary 객체가 동일한지 확인하는 방법

C#에서 두 HybridDictionary 객체가 동일한지 확인하려면 Equals() 메서드를 사용할 수 있습니다. 이 메서드는 비교 대상이 같은 인스턴스(참조)인 경우에만 true를 반환하고, 내용이 같아도 별개의 객체라면 false를 반환한다는 점에 유의해야 합니다.

HybridDictionary란?

HybridDictionary는 System.Collections.Specialized 네임스페이스에 포함된 컬렉션 클래스입니다. 요소 수가 적을 때는 ListDictionary처럼 동작하고, 컬렉션이 커지면 자동으로 Hashtable 기반으로 전환되어 효율적인 성능을 제공합니다.

예제 1: 같은 인스턴스를 참조하는 경우

다음 예제에서는 세 개의 HybridDictionary를 생성하고, dict3에 dict2를 할당한 뒤 두 객체를 비교합니다.

using System;
using System.Collections;
using System.Collections.Specialized;
public class Demo {
   public static void Main(){
      HybridDictionary dict1 = new HybridDictionary();
      dict1.Add("A", "Books");
      dict1.Add("B", "Electronics");
      dict1.Add("C", "Smart Wearables");
      dict1.Add("D", "Pet Supplies");
      dict1.Add("E", "Clothing");
      dict1.Add("F", "Footwear");
      Console.WriteLine("HybridDictionary1 elements...");
      foreach(DictionaryEntry d in dict1){
         Console.WriteLine(d.Key + " " + d.Value);
      }
      HybridDictionary dict2 = new HybridDictionary();
      dict2.Add("1", "One");
      dict2.Add("2", "Two");
      dict2.Add("3", "Three");
      dict2.Add("4", "Four");
      dict2.Add("5", "Five");
      dict2.Add("6", "Six");
      Console.WriteLine("
HybridDictionary2 elements...");
      foreach(DictionaryEntry d in dict2){
         Console.WriteLine(d.Key + " " + d.Value);
      }
      HybridDictionary dict3 = new HybridDictionary();
      dict3 = dict2;
      Console.WriteLine("
Is HybridDictionary3 equal to HybridDictionary2? = "+(dict3.Equals(dict2)));
   }
}

실행 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

HybridDictionary1 elements...
A Books
B Electronics
C Smart Wearables
D Pet Supplies
E Clothing
F Footwear
HybridDictionary2 elements...
1 One
2 Two
3 Three
4 Four
5 Five
6 Six
Is HybridDictionary3 equal to HybridDictionary2? = True

dict3에 dict2를 할당했기 때문에 두 변수는 동일한 인스턴스를 가리키며, 따라서 Equals() 결과는 True가 됩니다.

예제 2: 서로 다른 인스턴스를 비교하는 경우

이번에는 내용이 다른 두 개의 독립적인 HybridDictionary 객체를 비교해 보겠습니다.

using System;
using System.Collections;
using System.Collections.Specialized;
public class Demo {
   public static void Main(){
      HybridDictionary dict1 = new HybridDictionary();
      dict1.Add("A", "Books");
      dict1.Add("B", "Electronics");
      dict1.Add("C", "Smart Wearables");
      dict1.Add("D", "Pet Supplies");
      dict1.Add("E", "Clothing");
      dict1.Add("F", "Footwear");
      Console.WriteLine("HybridDictionary1 elements...");
      foreach(DictionaryEntry d in dict1){
         Console.WriteLine(d.Key + " " + d.Value);
      }
      HybridDictionary dict2 = new HybridDictionary();
      dict2.Add("1", "One");
      dict2.Add("2", "Two");
      dict2.Add("3", "Three");
      dict2.Add("4", "Four");
      dict2.Add("5", "Five");
      dict2.Add("6", "Six");
      Console.WriteLine("
HybridDictionary2 elements...");
      foreach(DictionaryEntry d in dict2){
         Console.WriteLine(d.Key + " " + d.Value);
      }
      Console.WriteLine("
Is HybridDictionary1 equal to HybridDictionary2? = "+ (dict1.Equals(dict2)));
   }
}

실행 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

HybridDictionary1 elements...
A Books
B Electronics
C Smart Wearables
D Pet Supplies
E Clothing
F Footwear
HybridDictionary2 elements...
1 One
2 Two
3 Three
4 Four
5 Five
6 Six
Is HybridDictionary1 equal to HybridDictionary2? = False

정리

HybridDictionary의 Equals() 메서드는 객체의 참조(레퍼런스) 동등성을 비교합니다. 즉, 한 변수에 다른 변수를 할당해 같은 인스턴스를 공유하는 경우에는 true를 반환하지만, 각각 새로 생성한 객체는 저장된 데이터가 달라도 false를 반환합니다. 따라서 두 사전의 내용 자체를 비교하려면 키와 값을 직접 순회하며 일일이 대조하는 별도의 로직을 구현해야 합니다.