TObjectDictionary<ansiString, boolean>
比較したカスタム等式でを作成するには、次のことを行う必要があります。
TObjectDictionary<ansiString, boolean>.create(
TDelegatedEqualityComparer<ansiString>.Create(
function(const Left, Right: ansiString): Boolean
begin
Result := ALSameText(Left, Right);
end,
function(const Value: ansiString): Integer
begin
// !! here i want the default GetHashCode !! I don't want to write it myself
end))
私は、関数の実装与える必要があるので、対等ANDためのGetHashCodeメソッドを。しかし、私はEquals関数の実装のみを提供したいと思います。出来ますか?
TDictionary
そしてTObjectDictionary
、キーのハッシュを必要とします。また、使用するTDelegatedEqualityComparer
場合は、ハッシュを生成する関数を提供する必要があります。これがまさにその仕組みです。
ただし、独自のハッシュコードを最初から作成したくない場合は、RTLのネイティブハッシュを次のように活用できますAnsiString
。
function(const Value: AnsiString): Integer
begin
Result := TEqualityComparer<AnsiString>.Default.GetHashCode(Value);
end
これは最終的に、ユニットからパブリックにアクセス可能な関数にデータをGetHashCode_LString()
渡すという名前の内部関数に委任されるため、代わりにその関数を直接呼び出すことができます。例:AnsiString
BobJenkinsHash()
System.Generics.Defaults
function(const Value: AnsiString): Integer
begin
Result := BobJenkinsHash(PAnsiChar(Value)^, Length(Value) * SizeOf(AnsiChar), 0);
end
または、関数のドキュメントにXE8 +で記載されているように、次のようになります。
警告:
BobJenkinsHash
非推奨です。をご利用くださいHash.THashBobJenkins.GetHashValue()
。
uses
System.Hash;
function(const Value: AnsiString): Integer
begin
Result := THashBobJenkins.GetHashValue(PAnsiChar(Value)^, Length(Value) * SizeOf(AnsiChar));
end
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加