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 が最初にハッシュ コードを比較し、次に提供された比較演算子を使用して等価性をチェックするためです。
もちろん、UpperCase をGetHashCode
関数内で使用することもできますが、ハッシュ関数自体を何らかの方法で変更できれば、より高速になるのではないかと考えました。