RAD Studio VCL Reference
ContentsIndex
PreviousUpNext
TEqualityComparer.Equals Method

Equals is a generic method used to check the equality of two values.

Pascal
function Equals(const Left: T; const Right: T): Boolean; virtual; abstract; overload; reintroduce;
C++
virtual __fastcall Boolean Equals(const T Left, const T Right) = 0;

Use Equals to check the equality of two values of the same type. Any class that descends from TEqualityComparer is expected to implement the Equals method.  

The return value of Equals must be one of the following.

Return value  
Description  
False  
Left is different from Right.  
True  
Left is equal to Right.  

 

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!