お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"TListのSortで注意"

この発言に対し以下のコメントが寄せられています
#00671 草薙いっぺい さん RE:TListのSortで注意

 TListの要素をソートするときには,自前の比較関数を用意して大小関係 を定義しますが,同じ組み合わせの2つのアイテムが引数に渡されてきた 場合に,大小or同値判定の結果が,引数の順序によらず一定していることが 必要です.でないと,際限なく要素の入れ替えを続けてスタックオーバー フローします. // function ListSort1(Item1, Item2: Pointer): Integer; var Comp: integer; Subject1,Subject2: TAcntSubject; begin Subject1 := Item1; Subject2 := Item2; if not(Subject1 is TAllotNote) and not(Subject2 is TAllotNote) then begin Comp := 0; end else if not(Subject1 is TAllotNote) and (Subject2 is TAllotNote) then begin Comp := -1; end else if (Subject1 is TAllotNote) and not(Subject2 is TAllotNote) then begin Comp := 1; end else begin // 仕訳データ同士 Comp := Trunc(Subject1.Date) - Trunc(Subject2.Date); if Comp = 0 then begin // 同日の取引 {*******} if (Subject1.DrCr = SelectedSubjectTemp.DrCr) and (Subject2.DrCr <> SelectedSubjectTemp.DrCr) then begin Comp := -1; end else if (Subject1.DrCr <> SelectedSubjectTemp.DrCr) and (Subject2.DrCr = SelectedSubjectTemp.DrCr) then begin Comp := 1; end; {*******} end; end; Result := Comp; end; // ソートの実行部 SbjList.Sort(ListSort1); // sort by date 以下は収束しない例 {*******} if (Subject1.DrCr = SelectedSubjectTemp.DrCr) then begin Comp := -1; end else if (Subject2.DrCr = SelectedSubjectTemp.DrCr) then begin Comp := 1; end; {*******} TN(CQJ01721) Original document by TN 氏 ID:(CQJ01721)



ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum