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 .
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 .