快速搜索备忘录行的方法



我在表单上有一个TMemo,它允许用户输入项目列表。人们可以在这里输入许多项目。当他们单击Save时,TMemo的内容将被选中,然后添加到数据库中。

我在TStringList中有第二个列表,我循环查看它的任何项是否包含在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;
----

所以字符串列表循环,检查它是否存在于备忘录中,若并没有从列表中删除。

然而,有了200多件商品,速度开始慢了很多,有了1000件,情况变得非常糟糕。

搜索TMemo最快的方法是什么?

将所有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;
----

相关内容

  • 没有找到相关文章

最新更新