掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
itemの検索を高速にしたいのですが。 (ID:1525)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
こんばんは。 なかなかおもしろそうな問題なので、 どのくらい速くなるのか、実験してみました。 ListBox1 の2万件のデータを、ListBox2の100個のデータで100回 検索して、インデックスを配列に格納。 ListBox2の100個のデータは、均等にばらけるように作成。 (1) ListBox の Items.IndexOf for i := 0 to 99 do Idx[i] := ListBox1.Items.IndexOf(ListBox2.Items[i]); (2) 上で書いた方法(StringList にコピーして、Sort してから検索) sl := TStringList.Create; try sl.Assign(ListBox1.Items); for i := 0 to sl.Count - 1 do begin sl.Objects[i] := Pointer(i); end; sl.CaseSensitive := True; sl.Sort; for i := 0 to 99 do Idx[i] := Integer(sl.Objects[(sl.IndexOf(ListBox2.Items[i]))]); finally sl.Free; end; 結果 前処理 検索 (1) 0ms 4098ms (2) 2686ms 2532ms StringListへのコピー、インデックス格納、ソート、などの前処理 で3秒弱かかるのはしょうがないとして、2分探索法の理屈からいけば、 もっと速くなるはずだけど、以外とのびない。Objects から取り出す処理が オーバーヘッドになっているのかな。 他に方法がないか考えて、ハッシュ法を使ったらと思って、いろいろ捜して みたら、なんと、Delphi6 から、THashedStringList などというピッタリの クラスがあるではないですか。で、それを試してみました。 長くなったので次に続く。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.