gpt4 book ai didi

c# - 为 .NET ala Boost.Functional/Hash 创建 'good' 哈希码

转载 作者:行者123 更新时间:2023-11-30 16:29:17 26 4
gpt4 key购买 nike

对于 C++,我一直使用 Boost.Functional/Hash无需处理移位、异或和素数即可创建良好的哈希值。是否有任何库可以为 C#/.NET 生成良好的(我不是要求最佳的)哈希值?我会使用此实用程序来实现 GetHashCode(),而不是加密哈希。

为了阐明为什么我认为这是有用的,这里是 boost::hash_combine 的实现,它结合哈希值(当然是实现 GetHashCode() 时非常常见的操作):

seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);

显然,此类代码不属于 GetHashCode() 的实现,因此应在其他地方实现。

最佳答案

我不会为此使用单独的库。如前所述,对于 GetHashCode 方法来说,快速和稳定是必不可少的。通常我更喜欢编写内联实现,但实际上使用辅助类可能是个好主意:

internal static class HashHelper
{
private static int InitialHash = 17; // Prime number
private static int Multiplier = 23; // Different prime number

public static Int32 GetHashCode(params object[] values)
{
unchecked // overflow is fine
{
int hash = InitialHash;

if (values != null)
for (int i = 0; i < values.Length; i++)
{
object currentValue = values[i];
hash = hash * Multiplier
+ (currentValue != null ? currentValue.GetHashCode() : 0);
}

return hash;
}
}
}

这样可以使用常见的哈希计算逻辑:

public override int GetHashCode()
{
return HashHelper.GetHashCode(field1, field2);
}

关于c# - 为 .NET ala Boost.Functional/Hash 创建 'good' 哈希码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6422816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com