繁体   English   中英

快速搜索Tmemo线的方法

[英]Fast way to search lines of Tmemo

我在允许用户输入项目列表的表单上有一个TMemo。 人们可以在这里输入许多项目。 当他们单击“保存”时,将检查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;
----

因此,stringlist循环播放,请检查它是否存在于备忘录中,如果没有从列表中删除。

但是,对于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;
----

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM