2009-10-27 300 views
1

IDE:Delphi 1 16位(是的,它是旧的,没有我买不起更新的版本或者运行它所需的硬件,除此之外我只是学习了Delphi,所以它很好用。)轮廓搜索

我已经加载了一个包含名称的TOutline(代表一个地址簿)。他们按排序顺序。我希望能够搜索大纲。

可能的搜索结果:

  1. 整个名称(如弗兰克·阿伦·史密斯)
  2. 部分名称(例如,艾伦。)

什么是搜索轮廓的好,快速的方法?

+1

令人印象深刻的,正在运行的Delphi 1 –

+0

很高兴地看到别人还在用Delphi 1!我在德尔福1和德尔福2010之间交叉编译单位一点点...很有趣。 :) – Nat

回答

2

对于排序列表,您可以使用binary search作为“BEGINS WITH”,但对于包含,您需要执行linear search(评估每个项目)。它已经一段时间,因为我已经用Delphi 1的工作,但这里是线性搜索:

线性搜索:

function OutlineContains(aOutline:tOutline;aText:string;Repos:boolean):boolean; 
var 
    aSearch : string; 
begin 
    Result := false; 
    aSearch := uppercase(aText); 
    for I := 0 to aOutline.Lines.Count-1 do 
    begin 
    if Pos(aSearch,Uppercase(aOutline.Lines.Text[i])) <> 0 then 
     begin 
     Result := true; 
     if Repos then 
      aOutline.SelectedIndex := i; 
     exit; 
     end; 
    end; 
end; 
+0

我会在找到第一个匹配项后退出。 –

+0

@sveinbringsli,你是对的。更新的例子。 – skamradt