详测 Generics Collections TList (9): BinarySearch


unit Unit1;



interface



uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;



type

  TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

  end;



var

  Form1: TForm1;



implementation



{$R *.dfm}



uses Generics.Collections, Generics.Defaults;



procedure TForm1.Button1Click(Sender: TObject);

var

  List: TList<string>;

  num: Integer;

  b: Boolean;

  Comparer: IComparer
 
   
    
  ;

begin

  List := TList<string>.Create();

  List.AddRange(['123', 'ABB', 'ABC']);



  {默认的查找需要完全吻合才能找到}

  if List.BinarySearch('ABC', num) then ShowMessage(IntToStr(num)); {2}



  {这里自定义个对比器, 只要第一个字符吻合就算找到了}

  Comparer := TComparer<string>.Construct(

    function(const s1,s2: string): Integer

    begin

      Result := Ord(s1[1]) - Ord(s2[1]);

    end);



  if List.BinarySearch('ABC', num, Comparer) then ShowMessage(IntToStr(num)); {1}

      

  List.Free;

end;



end.


  
    

你可能感兴趣的:(Collections)