Einzelnen Beitrag anzeigen

kcx

Registriert seit: 19. Feb 2008
44 Beiträge
 
#5

Re: Stringliste zufällig mischen

  Alt 18. Mär 2008, 14:59
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.
  Mit Zitat antworten Zitat