📜  C#|如何获取字符串的HashCode(1)

📅  最后修改于: 2023-12-03 15:30:17.664000             🧑  作者: Mango

C# | 如何获取字符串的HashCode

哈希码(HashCode)是将任何长度的数据映射为固定长度值的算法,常用于具有高性能的散列函数,如散列表(hash table)、哈希映射(hash map)等。

在C#中,String类已经提供了获取字符串的哈希码的方法,通过调用GetHashCode()方法即可获取。

示例代码
string str = "Hello, world!";
int hashCode = str.GetHashCode();
Console.WriteLine(hashCode);

输出:

-1098027246
注意事项
  • GetHashCode()方法返回的哈希码是一个整型值(int),其范围是在 -2147483648 到 2147483647 之间。
  • 字符串的哈希码是由字符串的每个字符的Unicode编码值计算得出的,因此具有相同字符的字符串往往对应相同的哈希码。
自定义哈希码

如果需要自定义哈希码的计算方式,可以重写GetHashCode()方法。在重写时,需要保证两个对象的GetHashCode()方法返回值相等时,它们的Equals()方法比较也相等。

下面是一个自定义哈希码计算方式的示例:

class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    
    public override int GetHashCode()
    {
        unchecked
        {
            int hash = 17;
            hash = hash * 23 + Id.GetHashCode();
            hash = hash * 23 + Name.GetHashCode();
            return hash;
        }
    }
    
    public override bool Equals(object obj)
    {
        if (obj is Person)
        {
            Person p = (Person)obj;
            return Id == p.Id && Name == p.Name;
        }
        
        return false;
    }
}

在上述代码中,Person类重写了GetHashCode()方法和Equals()方法,实现了自定义哈希码的计算方式。

总结

哈希码是计算机科学中一个重要的概念,可以用于高效地存储和查找数据。在C#中,String类已经提供了获取字符串的哈希码的方法,同时也可以自定义哈希码计算方式,以满足不同的需求。