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]