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

วิธีรับรหัสแฮชของ Tuple ใน C#

ภาพรวม

เมธอด 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) ได้ แต่อัตราน้อย