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;
コメント