เมธอด 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