全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2491
推到 Plurk!
推到 Facebook!

請問TStringList要如何快速比對是否有部分字串相同即可

答題得分者是:P.D.
17kobe
初階會員


發表:86
回覆:73
積分:31
註冊:2007-07-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-05-26 11:13:41 IP:60.250.xxx.xxx 訂閱
我有好幾筆資料如
dataSource[1]=ad.tmp'
dataSource[2]=ard.tmp'
dataSource[3]=ard.tmp'
dataSource[4]=ard.tmp'
dataSource[5]=aad.tmp'
dataSource[6]=agd.tmp'
dataSource[7]=a3d.tmp'
.
.
.
.
現在有個stringlist,裡面存有'gd'一筆資料
我要做的動作是何'gd'去比對所有dataSource資料,字串有部分相同則再加進'stringlist',不須取得index位置。最後目的得到stringlist清單而已

我的程式碼

[code delphi]
for i:=1 to length(dataSource) then
begin
tmp_string:=UpperCase(dataSource[i]); //都轉成大寫
for j := 0 to sl.Count-1 do //比對所有sl裡的字串清單
begin
if Pos(sl.Strings[j], tmp_string)>0 then //有找到部分字串相同的話
begin
if sl.strings[j]<>tmp_string then //要不相同才加入sl裡,可能寫法也要改
sl.Add(tmp_string);
break;
end;
end;
end;
[/code]

但我覺得我方式好像不太好,改用stringList的find方式可以部分比對嗎,而且不用知道其位置在哪。請問改怎麼可以快速部問比對比較好??
PS:我是要不分大小寫的

編輯記錄
17kobe 重新編輯於 2008-05-26 11:26:52, 註解 無‧
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-05-26 23:17:18 IP:61.67.xxx.xxx 未訂閱
我不知道是否還有更快的, 如果是我的話, 大概也會採用這個做法
不過我唯一會考慮的是, for j 的迴圈我會看情況, 以最大數的為主
例如
datasoruce 有 7筆
sl 有20筆
for i:= 1 to 7
for j:= 1 to 20

因為我會假設 sl 不會每次都一定比對到 1 to 20 的次數, 有可能比對到一半符合就 break 出來了,
這樣放在 j 來run, 應該可以省略一些時間
當然這不是絶對的啦! 而且現在的硬體速度越來越快, 也幾乎差不了多少了!
tcsnetok
一般會員


發表:3
回覆:8
積分:7
註冊:2008-05-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-05-27 12:40:10 IP:59.124.xxx.xxx 訂閱
剛剛試跑了一下..

我的寫法跟你差不多...

速度上應該ok..

可讀性應該比較重要...

我覺得ok啦
系統時間:2024-04-20 6:06:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!