掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
itemの検索を高速にしたいのですが。 (ID:1523)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
何回も検索をするんですよね。 Indexofは、通常、頭から順になめて検索しますので、1万件なら、 最大1万回の比較が必要です。 item を並び替えてもいいのなら、Sorted を True にしておくと、 2分探索法で検索しますので、最大でも、14回(2^14=16384)で すみます。 itemの順は変えられないという場合は、TStringListにコピーして、 そちらで、Sort して、IndexOf するようにすればどうでしょうか。 検索数がすくないと、ソートにかかる時間だけ遅くなりますけど、 回数は多いほど効果はでてきます。 サンプル var i, FindIndex: integer; sl: TStringList; begin sl := TStringList.Create; try sl.Assign(ListBox1.Items); for i := 0 to sl.Count - 1 do begin sl.Objects[i] := Pointer(i); //Objects に、元のIndexを格納しておく。 end; sl.CaseSensitive := True;//大文字小文字を区別する。 sl.Sort; FindIndex := Integer(sl.Objects[(sl.IndexOf(Edit1.Text))]); //探索したItemからObjects格納したインデックスを取り出す。 ListBox1.ItemIndex := FindIndex; finally sl.Free; end; もっと高速化が必要というなら、検索用のインデックスを持たせるとか、 固定長にするとか、データ構造からかんがえ直す必要があると思います。 あるでしょう。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.