例如,我在一个tstringlist里面存放了几万条记录,如何判断是不是存在abc这一项通常是从头到尾遍历,如
for i:=0 to a.count -1 do
 begin
   if a.strngs[i]='abc' then
    begin
     showmessage('存在');
     break;
    end;
 end;还有没有效率更高的办法,请赐教 

解决方案 »

  1.   

    如果已排序好的,用二分查找比较快tstringlist有一个方法IndexOf(),也是先排序的
      

  2.   

    忘了说,IndexOf()也是用的二分法查找
      

  3.   

    没排序,那只能逐一比较了,要比较快一些的,可以添加string的时候生成某种32位hash,比如CRC32,使用AddObject和string一起添加,查找的时候使用Objects[]属性查找hash,如果hash一致再比较string。
      

  4.   

    添加完所有字符串后设置stringlist.sorted:=true;
      

  5.   

    搜索下hash算法
    我曾经做过一段找出所有文本行中,重复行的的代码,100百万行数据处理下来只要1,2秒钟。
      

  6.   

    排序可以设置stringlist的sorted为True.然后用indexof来查找,它就是二分查找了.
      

  7.   

    如果排序的话,可以直接设置Duplicates属性为dupError,这样添加重复的string时会生成异常,你捕捉异常就知道要添加的串已经存在了。
      

  8.   

    IndexOf()不需要排序。
    find才需要排序。楼上的好像说错了吧?