線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1343
推到 Plurk!
推到 Facebook!

TStringList的使用問題?

答題得分者是:wameng
chrislao
初階會員


發表:86
回覆:69
積分:36
註冊:2002-12-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-04 12:16:09 IP:202.175.xxx.xxx 未訂閱
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; numlist:tstringlist; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin numlist:=tstringlist.Create; for i:=1 to 11 do numlist.Add(inttostr(i)); end; procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin if numlist.Find(edit1.Text,i) then showmessage(inttostr(i)) else showmessage('not find'); end; end. 運行上述的程式,在edit1內輸入1至9都可以找到它的index,但輸入10或者11就找不到,請問為甚麼呢?
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-04 12:39:41 IP:210.65.xxx.xxx 未訂閱
Hi chrislao,    請更改為
procedure TForm1.FormCreate(Sender: TObject);
var
  i:integer;
begin
  NumList := TStringList.Create;
  for i:=1 to 11 do
    NumList.Add(IntToStr(i));
  NumList.Sort;
end;
因為:Find will only work on sorted lists!(詳見Delphi 的 Help) ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
chrislao
初階會員


發表:86
回覆:69
積分:36
註冊:2002-12-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-04 16:40:04 IP:202.175.xxx.xxx 未訂閱
增加了 NumList.Sort; 是可以,但find 10 所得出的index是 1, find 11 的index是 2, 為甚麼?
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-04 16:51:35 IP:61.222.xxx.xxx 未訂閱
補充: 用 indexof 不需要 Sort支援 var i:integer; begin i := numlist.indexof(edit1.Text); if I>-1 then showmessage(inttostr(i)) else showmessage('not find'); end;
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-04 17:45:13 IP:219.80.xxx.xxx 未訂閱
你好:
    你一定沒注意 TStringList 處理資料的型態喔,她只能處理 String 而不是
Integer 所以排序時是以 ASCII Code 排列而不是數字排列.如果你要使用數字的方式排列,你可以利用 TList 來處理,因為 TList 可以自訂排序的函式
    < src="http://sourceprovide.deepen.com.tw/K_Top/bp.gif">
        
chrislao
初階會員


發表:86
回覆:69
積分:36
註冊:2002-12-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-04 21:51:58 IP:202.175.xxx.xxx 未訂閱
謝謝ha0009的提點
cancer
高階會員


發表:58
回覆:319
積分:190
註冊:2004-07-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-10-05 00:11:45 IP:210.201.xxx.xxx 未訂閱
排列結果: 1 10 11 2 3 4 5 6 7 8 9 沒錯呀!只是,不是你要的而已。
系統時間:2024-07-02 1:38:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!