gpt4 book ai didi

delphi - 不区分大小写的 Bob Jenkins 哈希?

转载 作者:行者123 更新时间:2023-12-02 00:08:14 25 4
gpt4 key购买 nike

Bob Jenkins 哈希函数是否有不区分大小写的变体?

Generics.Defaults.BobJenkinsHash

提供快速哈希函数。不幸的是,它不能与不区分大小写的比较函数结合使用,如下所示

TCustomStringComparer = class (TEqualityComparer <String>)
function Equals(const Left, Right: String): Boolean; override;
function GetHashCode(const Value: String): Integer; override;
end;
function TCustomStringComparer.Equals (const Left, Right : String) : Boolean;
begin
Result := CompareText (Left, Right) = 0;
end;
function TCustomStringComparer.GetHashCode (const Value : String) : Integer;
begin
Result := Generics.Defaults.BobJenkinsHash (Value [1], Length (Value) * SizeOf (Char), 0);
end;

这是因为 TDictionary 首先比较哈希码,然后在检查相等性时使用提供的比较器。

当然,我可以在 GetHashCode 函数中使用 UpperCase,但我想知道如果我能以某种方式修改哈希函数本身,是否会更快。

最佳答案

不,哈希函数没有大小写不变的版本。在将字符串传递给哈希函数之前,将所有字符串小写或大写。

关于delphi - 不区分大小写的 Bob Jenkins 哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1649048/

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