|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"TList.AddとTList.Sort"
{ 先日はまった、TList.AddとTList.Sortの使い方のサンプルです。
使い方:
(1)フォーム上にメモとボタンを2つずつ配置する
(2)Button1とButton2のOnClickのイベントとしてButton1.Clickを共有する
(3)プログラムを実行し、Memo1に数値を入力
(4)Button1/Button2をクリックするとMemo2にMemo1の内容を昇順/降順にソー
トした結果をそれぞれ出力する }
var
myList: TList;
{ TList.Sortの引数には、2つのPointer型の引数を取りInteger型の結果を返す
関数を指定する。関数の戻り値は
Item1 < Item2ならば <0
Item1 = Item2ならば =0
Item1 > Item2ならば >0
である }
{ 昇順ソートの関数 }
function AscSort(Item1, Item2: Pointer): Integer;
begin
if Integer(Item1^) < Integer(Item2^) then
AscSort := -1
else if Integer(Item1^) = Integer(Item2^) then
AscSort := 0
else
AscSort := 1;
end;
{ 降順ソートの関数 }
function DescSort(Item1, Item2: Pointer): Integer;
begin
if Integer(Item1^) < Integer(Item2^) then
DescSort := 1
else if Integer(Item1^) = Integer(Item2^) then
DescSort := 0
else
DescSort := -1;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Lines.Clear;
Memo2.Lines.Clear;
myList := TList.Create; { myListを生成する }
end;
{ ボタンが押されたら、myListにMemo1の内容を整数値として保存する
その後昇順又は降順でソートし、結果をMemo2に書き込む }
procedure TForm1.Button1Click(Sender: TObject);
var
x: ^Integer;
cnt: Integer;
begin
Memo2.Lines.Clear;
for cnt := 0 to Memo1.Lines.Count - 1 do
begin
{ TListに格納されるのは、値へのポインタであるため
新しい領域を確保してやる必要がある }
New(x);
{ Memo1の中身を、Integerとして保存 }
x^ := StrToInt(Memo1.Lines[cnt]);
myList.Add(x);
end;
if (Sender as TButton).Name = 'Button1' then
myList.Sort(AscSort) { Button1が押されたら昇順ソート }
else
myList.Sort(DescSort); { Button2が押されたら降順ソート }
{ ソートされたmyListの中身をMemo2に書き出す }
for cnt := 0 to myList.Count - 1 do
begin
Memo2.Lines.Add(IntToStr(Integer(myList.Items[cnt]^)));
end;
{ 確保した記憶域を解放する }
for cnt := 0 to myList.Count - 1 do
begin
Dispose(myList.Items[cnt]);
end;
{ myListをクリア }
myList.Clear;
end;
97/10/25(土) 20:24 CELL(BYH06053)
Original document by CELL 氏 ID:(BYH06053)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|