- Tìm số 0 đầu tiên trong một mảng bit
- Unix Hiển thị thông tin về các tập tin khớp với một trong hai mẫu
- Biểu thức chính quy thay thế nhiều tệp
- Ẩn lệnh từ xtrace
在很多情况下,我需要在 C# 中访问合适的哈希算法,从重写 GetHashCode
到对数据执行快速比较/查找。
我发现 FNV 哈希是一种非常简单/好/快速的哈希算法。但是,我从未见过 C# 实现的好示例。
FNV-1a哈希算法的核心如下:
hash = OFFSET_BASIS
foreach (object value in object)
{
hash = hash ^ value.GetHashCode()
hash = hash * FNV_PRIME
}
所以,当我为一个类覆盖 GetHashCode
时,我最终会做类似的事情:
public static class FNVConstants
{
public static readonly int OffsetBasis = unchecked((int)2166136261);
public static readonly int Prime = 16777619;
}
public override int GetHashCode()
{
int hash = Constants.FNVConstants.OffsetBasis;
hash = (hash ^ EntityId.GetHashCode()) * Constants.FNVConstants.Prime;
hash = (hash ^ FromDate.GetHashCode()) * Constants.FNVConstants.Prime;
hash = (hash ^ ToDate.GetHashCode()) * Constants.FNVConstants.Prime;
return hash;
}
人们对此有何看法?
1 Câu trả lời
您可以将其添加到您的FNVConstants
类
public static int CreateHash(params object[] objs)
{
return objs.Aggregate(OffsetBasis, (r, o) => (r ^ o.GetHashCode()) * Prime);
}
然后像这样调用它
public override int GetHashCode()
{
return FNVConstants.CreateHash(EntityId, FromDate, ToDate);
}
关于FNV哈希的C#实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13974443/
我正在尝试快速实现 FNV 散列的一个版本。这是在 Objective-C 中: + (uint32_t)hash:(uint8_t *)a length:(uint32_t)length {
这是算法的内容。 hash = FNV_offset_basis for each octet_of_data to be hashed hash = hash * FNV_prime
我正在尝试整合 FNV基于 PHP 的项目的哈希算法,作为为各种数据(例如 URL、关键字)生成哈希的要求的一部分。 我看到了这个implementation内文博亚诺夫。他提到由于 PHP 的算术限
如果在计算FNV-1a的过程中有什么不利影响吗?哈希,一次异或 4 个字节而不是一个字节? 最佳答案 是的,有问题。该算法对每个字节进行异或运算,然后乘以将该字节与其余值“混合”。如果您一次对四个字节
我的 iPhone 项目中有一个 HTTP 连接器,查询必须使用 Fowler–Noll–Vo (FNV) 哈希根据用户名设置参数。 此时我有一个 Java 实现,这是代码: long fnv_pri
我有一列存储 uuid 字符串。我添加一个新列来存储其整数(64 位)哈希值以进行索引。选择哪个哈希函数? 1. int(md5('a306d9cb-4d75-4673-ae43-7004706925
Tôi là một lập trình viên xuất sắc, rất giỏi!