Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

Stringliste zufällig umsortieren

  Alt 2. Mär 2007, 14:57
Folgende Prozedure bringt eine Stringliste (Objekt, abgeleitet von TStrings) in zufälliger Weise durcheinander.
Es ist Quasi das Gegenteil von Sortieren.
Delphi-Quellcode:
procedure RandomizeTStrings(list:TStrings);
var
   list2 : TStrings;
   i : Integer;
begin
   list2 := TStringList.Create;
   list.BeginUpdate;
   try
      while list.Count > 1 do
      begin
         i := Random(list.Count);
         list2.AddObject(list.Strings[i], list.Objects[i]);
         list.Delete(i);
      end;
      list.AddStrings(list2);
   finally
      list.EndUpdate;
      list2.Free;
   end;
end;
Das in der While-Schleife der Vergleich auf > 1 stattfindet ist übrigens Absicht:
das letzte Element bleibt in list und braucht nicht nach list2 kopiert werden, nur um anschliessend
zurück nach list kopiert zu werden.

Von Lannes kommt folgende Alternative:
Delphi-Quellcode:
//Randomize bei Programmstart nicht vergessen
procedure RandomizeTStrings(list:TStrings);
var z : Integer;
begin
  list.BeginUpdate;
  for z := 0 to list.Count-1 do
    list.Exchange(z,Random(list.Count));
  list.EndUpdate;
end;
Von Hawkeye219 kommt außerdem noch diese Variante:
Delphi-Quellcode:
procedure RandomizeTStrings (list: TStrings);
var
  z : Integer;
begin
  list.BeginUpdate;
  try
    for z := list.Count - 1 downto 1 do
      list.Exchange(z, Random(z));
  finally
    list.EndUpdate;
  end;
end;
[edit=CalganX]Alternativen angefügt. Mfg, CalganX[/edit]
Andreas
  Mit Zitat antworten Zitat