C#에서 튜플의 해시코드를 구하려면 GetHashCode() 메서드를 사용합니다. 이 메서드는 현재 튜플 객체에 대한 해시 코드를 정수(int) 형태로 반환합니다.
해시코드는 주로 해시 기반 컬렉션(예: Dictionary, HashSet)에서 객체를 빠르게 찾거나, 두 객체가 같은지 비교할 때 활용됩니다. 동일한 값을 가진 튜플은 같은 해시코드를 반환하지만, 값이 하나라도 다르면 서로 다른 해시코드를 갖게 됩니다.
예제 1
아래 예제에서는 두 개의 중첩 튜플을 생성하고, Equals()로 동등성을 비교한 뒤 각각의 해시코드를 출력합니다.
using System;
public class Demo {
public static void Main(String[] args){
var tuple1 = Tuple.Create(150, 400, 500, 700, 100, 1200, 1500, Tuple.Create(50, 100));
var tuple2 = Tuple.Create(150, 400, 500, 700, 100, 1200, 1500, Tuple.Create(100, 200));
Console.WriteLine("Is Tuple1 equal to Tuple2? = "+tuple1.Equals(tuple2));
Console.WriteLine("HashCode of Tuple1 = "+tuple1.GetHashCode());
Console.WriteLine("HashCode of Tuple2 = "+tuple2.GetHashCode());
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Is Tuple1 equal to Tuple2? = False HashCode of Tuple1 = 4621968 HashCode of Tuple2 = 4623530
두 튜플은 마지막 요소인 중첩 튜플의 값이 서로 다르기 때문에 Equals() 비교 결과는 False이며, 해시코드 역시 서로 다른 값이 반환된 것을 확인할 수 있습니다.
예제 2
이번에는 완전히 동일한 값을 가진 두 개의 7요소 튜플을 비교해 보겠습니다.
using System;
public class Demo {
public static void Main(String[] args){
var tuple1 = Tuple.Create(75, 200, 500, 700, 100, 1200, 1500);
var tuple2 = Tuple.Create(75, 200, 500, 700, 100, 1200, 1500);
Console.WriteLine("Is Tuple1 equal to Tuple2? = "+tuple1.Equals(tuple2));
Console.WriteLine("HashCode of Tuple1 = "+tuple1.GetHashCode());
Console.WriteLine("HashCode of Tuple2 = "+tuple2.GetHashCode());
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Is Tuple1 equal to Tuple2? = True HashCode of Tuple1 = 3231587 HashCode of Tuple2 = 3231587
두 튜플의 모든 요소 값이 같으므로 Equals() 비교 결과는 True이고, 두 튜플의 해시코드도 동일하게 반환됩니다. 이처럼 GetHashCode() 메서드를 사용하면 튜플의 해시코드를 손쉽게 얻을 수 있으며, 값이 같은 튜플은 항상 같은 해시코드를 가진다는 점을 기억하면 됩니다.