Zitat von
shmia:
Versuch mal spasseshalber, um zu Testen, ob die Random-Funktion die Bremse ist:
Delphi-Quellcode:
procedure Shuffle(List: TStrings);
var
i: Integer;
begin
Randomize;
List.BeginUpdate;
try
for i := 0 to Pred(List.Count) do
List.Exchange(i, (i*991+103) mod List.Count); // 991 & 103=Primzahl
finally
List.EndUpdate;
end;
end;
Ist gut 200 ms schneller, also nicht wirklich viel.
So ist es zwar etwas umständlich, aber dafür sehr schnell:
Delphi-Quellcode:
procedure Shuffle3(List: TStrings);
var
i, r: Integer;
s: Array of String;
t: String;
begin
SetLength(s, List.Count);
for i := 0 to Pred(List.Count) do
s[i] := List[i];
List.BeginUpdate;
try
List.Clear;
for i := Low(s) to High(s) do
begin
//repeat
r := Random(High(s));
//until r <> i;
t := s[i];
s[i] := s[r];
s[r] := t;
end;
for i := Low(s) to High(s) do
List.Add(s[i]);
finally
List.EndUpdate;
end;
end;
Werde es dann wohl doch so machen, Thx@All.