2

ユーザーがアイテムのリストを入力できるフォームに TMemo があります。人々はここに多くの項目を入力できます。[保存] をクリックすると、TMemo の内容がチェックされ、データベースに追加されます。

TStringList に 2 番目のリストがあり、これをループして、その項目のいずれかが TMemo に含まれているかどうかを確認します。

ナッツシェルでは、このように見えます

....
//slItems = TStringList
//mItems = TMemo
for i := slItems.Count -1 downto 0 do
begin
  if mItems.Lines.IndexOf(slItems[i]) = -1 then
    slItems[i].Delete;
end;
----

stringlist がループしているので、メモに存在するかどうかを確認し、存在しない場合はリストから削除します。

ただし、200 以上のアイテムでは速度が大幅に低下し始め、1000 になると非常に悪くなります。

TMemo を検索する最速の方法は何ですか?

4

1 に答える 1

7

TMemoすべてをローカルに読み込み、TStringListそこから作業します。アクセスするたびTMemo.Linesに、Windows メッセージングに依存して、Windows が提供する複数行のテキスト ボックスと対話します。とにかく効率的!

....
//slItems = TStringList
//mItems = TMemo
//L = TStringList
L.Text := mItems.Text; // edited per David's suggestion.
L.Sorted := True; // per Uwe Raabe's suggestion.
for i := slItems.Count -1 downto 0 do
begin
  if L.IndexOf(slItems[i]) = -1 then
    slItems[i].Delete;
end;
----
于 2011-04-11T12:42:45.903 に答える