RAD Studio VCL Reference
|
Default returns an instance of TEqualityComparer for a given type.
class function Default: IEqualityComparer<T>; static;
static __fastcall IEqualityComparer<T> Default();
Use the Default method to obtain an instance of TEqualityComparer for a given type. RTTI is used to determine the type information and to select the most appropriate implementation of TEqualityComparer. For example, calling TEqualityComparer<String>.Default will return an instance of TEqualityComparer that can compare string types.
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!
|