十八、详测 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.

posted on 2009-11-05 12:05  jxgxy  阅读(398)  评论(0编辑  收藏  举报

导航