文字列リスト(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;