So eine TStringlist ist schon sehr brauchbar und praktisch. Langsamer als ein Array ist sie eigentlich nicht, wenn man davon absieht, das beim Einfügen ein wenig Speicheroverhead anfällt.
Die normale Vorgehensweise wäre:
Daten in eine TStringList schreiben, sortieren, die obersten 5 Elemente nehmen.
Du kannst dir einen Algorithmus schreiben, der ein wenig schneller ist, so z.B.:
Delphi-Quellcode:
Const
MaxCount = 5;
Var
i, j, n : Integer;
max : Array [1..MaxCount] Of Integer;
begin
n := 0;
for i := 1 to 5 do max[i] := -maxint;
for I := 0 to MyList.Count-1 do
for j := 1 to 5 do
if max[j] < MyList[i] then begin
move (max[j], max[j + 1], (Length(max) - j) * SizeOf(max[1]));
max[j] := MyList[i];
break;
end;
end;
Nachteil: Wenn MaxConst mal steigt, wird dier Algorithmus doch wieder langsamer. Nun könnte man dann die Suche in Max durch eine Binärsuche ersetzen, aber die widerum ist suboptimal, wenn MaxConst klein ist.
Das Bild hängt schief.