ภาพรวม
เมธอด Tuple.GetHashCode() คืนค่าแฮชโค้ดของ Tuple ซึ่งคำนวณจากสมาชิกทุกตัว สอง Tuple ที่มีค่าเท่ากันจะได้แฮชโค้ดเท่ากัน
ตัวอย่าง 1: Tuple 8 สมาชิก (7 + nested Tuple)
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());
}
}
ผลลัพธ์ตัวอย่าง 1
Is Tuple1 equal to Tuple2? = False HashCode of Tuple1 = 4621968 HashCode of Tuple2 = 4623530
ตัวอย่าง 2: Tuple 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());
}
}
ผลลัพธ์ตัวอย่าง 2
Is Tuple1 equal to Tuple2? = True HashCode of Tuple1 = 3231587 HashCode of Tuple2 = 3231587
สรุป
- แฮชโค้ดใช้สำหรับ HashSet, Dictionary key, ฯลฯ
- Tuple ที่เท่ากัน (Equals = true) ต้องมีแฮชโค้ดเท่ากัน
- แฮชโค้ดอาจชนกัน (collision) ได้ แต่อัตราน้อย