unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    FBits: TBits;
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
  FBits := TBits.Create;
  FBits.Size := 99999999; // 8位号码 千万级  类填充索引
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(FBits);
end;procedure TForm1.Button1Click(Sender: TObject);
const
  testCount = 1000000; //百万个测试
var
  numberList: array of integer;
  numberFlagList: array of boolean;
  i: integer;
  bt: DWORD;
begin
  Randomize;
  setlength(numberList, testCount);
  setlength(numberFlagList, testCount);
  for i := 0 to testCount - 1 do
    begin
      numberList[i] := Random(99999999);
    end;  bt := GetTickCount;
  for i := 0 to testCount - 1 do
    numberFlagList[i] := FBits.Bits[numberList[i]] ;  ShowMessage(IntToStr(GetTickCount-bt));
  // 百万个测试不会 超过 1秒的
end;end.

解决方案 »

  1.   

    考虑 作一个  TBits 的 数组 按区号 划分
      

  2.   

    不明白 withcsharp() 说的 TBits 数组是什么样子的
      

  3.   

    withcsharp() 的意图,可能跟我在一楼说的基本思路不谋而合。但,没有TBits这样的类型。可以参考我在一楼说的那篇文章,用集合(或集合数组)表示,用集合进行运算。
      

  4.   

    TBits 是从delphi6 就有的
      

  5.   

    我的 代码 是在 delphi6 可以运行的 
      

  6.   

    直接用 下标  是最快的
    因为 那是 直接定位
    例如 查 8186045
    FBits.Bits[8186045]