LoginSignup
0
0

More than 5 years have passed since last update.

文字列リスト(TStringList)で、二分探索(Binary Search)する

Posted at

文字列リスト(TStringList)の二分探索

文字列リスト(TStringList)には、二分探索でリスト内を検索する関数があるので、試してみる。
文字列リストには、カナ名をテストデータとしてセット。
TStringList.Sorted プロパティを使用すると TStringList.IndexOf も内部で二分探索を使用するようになるが、記載例としては、TStringList.Find を使用する。

記載例

var
  slist: TStringList;
  idx: Integer;
begin
  slist := nil;
  try
    // テスト用にカナ名を文字列リストに追加する
    slist := TStringList.Create;
    slist.Add('イムラリュウゾウ');
    slist.Add('フクヤマチエコ');
    slist.Add('デクチカオリ');
    slist.Add('ツチヤメイ');
    slist.Add('ウメヅナホミ');
    slist.Add('ワタナベイワオ');
    slist.Add('アライウララ');
    slist.Add('サワダマヨ');
    slist.Add('オヤマハルカ');
    slist.Add('コクボカズオ');
    slist.Add('ヨシムラアキオ');
    slist.Add('オグラオサム');
    slist.Add('マチダハルカ');
    slist.Add('フナコシユウト');
    slist.Add('コウヤトシヒコ');
    slist.Add('イシガキユウナ');
    slist.Add('エナリワカナ');
    slist.Add('ウスイナホ');
    slist.Add('タマキヤスコ');
    slist.Add('ノムラトモミ');
    // ソートする
    slist.Sort;

    // 確認用にメモコントロールに文字列リストをセット
    Memo1.Lines.Assign(slist);
    // 二分探索(Binary Search)を行う
    // 見つからなかった場合には、False が返る
    if slist.Find('オヤマハルカ', idx) then
    begin
      // 検索結果を表示
      ShowMessage(IntToStr(idx));
    end;
  finally
    FreeAndNil(slist);
  end;
end;
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0