RAD Studio VCL Reference
|
GetHashCode is a generic method used to generate a hash code for a value.
function GetHashCode(const Value: T): Integer; virtual; abstract; overload; reintroduce;
virtual __fastcall int GetHashCode(const T Value) = 0;
Use GetHashCode to generate a hash code for the given input value. Any class that descends from TEqualityComparer is expected to implement the GetHashCode method.
Two equal values are required to have the same hash code, while two different values are not required to have different hash codes.
Delphi Examples:
{ This example demonstrates the usage of TDelegatedEqualityComparer and anonymous methods in order to create a custom comparer. The example assumes two memos and two buttons are present on the form. } type TCustomEqualityComparer = class(TEqualityComparer<String>) public function Equals(const Left, Right: String): Boolean; override; function GetHashCode(const Value: String): Integer; override; end; { TCustomEqualityComparer } function TCustomEqualityComparer.Equals(const Left, Right: String): Boolean; begin { Make a case insensitive comparison } Result := CompareText(Left, Right) = 0; end; function TCustomEqualityComparer.GetHashCode(const Value: String): Integer; begin { Generate a hash code. Simply return the length of the string as its hash code } Result := Length(Value); end; procedure TForm3.NumberInstances(const AComparer: IEqualityComparer<String>); var Dictionary: TDictionary<String, Cardinal>; I: Integer; AString: String; begin { Create a new dictionary of string/cardinal } Dictionary := TDictionary<String, Cardinal>.Create(AComparer); { Populate the dictionary with strings in the memo } for I := 0 to InMemo.Lines.Count - 1 do begin { Get the list from the memo } AString := InMemo.Lines[I]; { If the string is already in the dictionary, increase its count by one. Otherwise add it with one by default. } if Dictionary.ContainsKey(AString) then Dictionary[AString] := Dictionary[AString] + 1 else Dictionary.Add(InMemo.Lines[I], 1); end; { Copy the list with numbers to the memo } OutMemo.Clear; { Now populate the out memo with string and the number of times it was present in the initial memo} for AString in Dictionary.Keys do OutMemo.Lines.Add(AString + ':' + UIntToStr(Dictionary[AString])); { Free resources } Dictionary.Free(); end; procedure TForm3.btDefaultCountClick(Sender: TObject); begin { Use the default provided equality comparer } NumberInstances(TEqualityComparer<String>.Default); end; procedure TForm3.btCustomCountClick(Sender: TObject); begin { Use the cutom generated equality comparer } NumberInstances(TCustomEqualityComparer.Create()); end;
Copyright(C) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
|
What do you think about this topic? Send feedback!
|