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

เมธอด Single.GetHashCode() ใน C# พร้อมตัวอย่าง


เมธอด Single.GetHashCode() ใน C# ใช้สำหรับคืนค่ารหัสแฮช (hash code) ของอินสแตนซ์ float นี้ ใช้สำหรับอัลกอริทึมแฮชและโครงสร้างข้อมูลเช่น HashTable, Dictionary

ไวยากรณ์ (Syntax)

public override int GetHashCode ();

ตัวอย่างที่ 1: เปรียบเทียบ HashCode ของค่า float ต่างกัน

using System;

public class Demo
{
    public static void Main()
    {
        float f1 = 40.2f;
        object f2 = 50.5f;  // บอกซ์เป็น object

        Console.WriteLine("Value1 = " + f1);
        Console.WriteLine("HashCode of Value1 = " + f1.GetHashCode());
        Console.WriteLine("Value2 = " + f2);
        Console.WriteLine("HashCode of Value2 = " + f2.GetHashCode());
        Console.WriteLine("Are both the values equal? = " + f1.Equals(f2));
    }
}

ผลลัพธ์

Value1 = 40.2
HashCode of Value1 = 1109445837
Value2 = 50.5
HashCode of Value2 = 1112145920
Are both the values equal? = False

ตัวอย่างที่ 2: HashCode กับการเปรียบเทียบค่า

using System;

public class Demo
{
    public static void Main()
    {
        float f1 = 15.3f;
        float f2 = 35.9f;

        Console.WriteLine("Value1 = " + f1);
        Console.WriteLine("Hashcode for Value1 = " + f1.GetHashCode());
        Console.WriteLine("Value2 = " + f2);
        Console.WriteLine("Hashcode for Value2 = " + f2.GetHashCode());
        Console.WriteLine("Is f1 and f2 equal? = " + f1.CompareTo(f2));
    }
}

ผลลัพธ์

Value1 = 15.3
Hashcode for Value1 = 1098173645
Value2 = 35.9
Hashcode for Value2 = 1108318618
Is f1 and f2 equal? = -1

ข้อสังเกตสำคัญ

  • HashCode ใช้สำหรับการจัดเก็บในคอลเลกชันแบบแฮช — ไม่รับประกันความเป็นเอกลักษณ์ (อาจมีการชน hash collision)
  • ค่า float ที่เท่ากันจะมี HashCode เท่ากันเสมอ (แต่ค่าที่ต่างกันอาจมี HashCode เหมือนกันได้)
  • ค่า NaN มี HashCode เฉพาะ (float.NaN.GetHashCode() คืนค่าคงที่)
  • ค่า +Infinity และ -Infinity ก็มี HashCode เฉพาะตัว
  • สำหรับการเปรียบเทียบค่า float ควรใช้ Equals() หรือ CompareTo() ไม่ใช่ HashCode