首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >快速搜索Tmemo行的方法

快速搜索Tmemo行的方法
EN

Stack Overflow用户
提问于 2011-04-11 20:38:05
回答 1查看 1.1K关注 0票数 2

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

我在TStringList中有第二个列表,我循环遍历该列表并检查它的任何项是否包含在TMemo中。

在坚果壳中,它看起来像这样

代码语言:javascript
运行
复制
....
//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;
----

所以字符串列表循环,检查它是否存在于memo中,如果不存在,则从列表中删除。

然而,对于200+项目,这开始变慢了很多,而在1000项目中,它变得非常糟糕。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-11 20:42:46

将所有TMemo读取到本地TStringList中,并从中开始工作。每次访问TMemo.Lines时,您都依赖于Windows消息传递来与windows提供的多行文本框进行对话。任何事情都不是有效的!

代码语言:javascript
运行
复制
....
//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;
----
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5621364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档