Delphi/C++Builder Generics TList(TObjectList) と無名関数でソートと元の順序
Generics TList と匿名関数のソートメモ
TList<THogehoge> を匿名関数でソートする場合
System.Generics.Defaults の TComparer を挟んで、function の const もお忘れ無く
【捕捉】
TList<THogehoge> を匿名関数でソートする場合
System.Generics.Defaults の TComparer を挟んで、function の const もお忘れ無く
uses Generics.Collections, System.Generics.Defaults; ItemList.Sort(TComparer<THogehoge>.Construct( function(const Item1, Item2: THogehoge): Integer begin end));
【捕捉】
上記はクイックソートで行われるため、Item1 と Item2 の比較が同じだと元の順序が保たれない場合があるので、Compare結果が同じ場合、私は元の順序であるリストインデックスで比較したりしてます
// 日付の例 if (Item1.date = Item2.date) then begin Result := ItemList.IndexOf(Item1) - ItemList.IndexOf(Item2); end else begin Result := CompareDate(Item1.date, Item2.date); end;
コメント