Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TStrings-Elemente zufällig anordnen (https://www.delphipraxis.net/57992-tstrings-elemente-zufaellig-anordnen.html)

DevilsCamp 29. Nov 2005 18:31


TStrings-Elemente zufällig anordnen
 
Ich habe z.Z. folgenden Code um die Strings einer Listbox zufällig anzuordnen:
Delphi-Quellcode:
procedure TForm1.StringListZufall;
var
  randomliste : TStringList;
  i          : Integer;
  j          : Integer;
begin
  randomliste := TStringList.Create;

  while (ListBox1.Items.Count>0) do
  begin
    i := Random(ListBox1.Items.Count);
    randomliste.Add(ListBox1.Items[i]);
    ListBox1.Items.Delete(i);
  end;

  ListBox1.Items.Assign(randomliste);

  randomliste.Free;
end;
Doch leider werden die Items oft kaum durcheinander gewürfelt... :(

Gibt es vielleicht eine bessere Lösung?

Khabarakh 29. Nov 2005 18:35

Re: TStrings-Elemente zufällig anordnen
 
Hier im Forum suchenPermutationen heißt das Zauberwort :wink: .

dahead 29. Nov 2005 18:36

Re: TStrings-Elemente zufällig anordnen
 
Randomize hast du aufgerufen?

Um das noch etwas zu variieren, könntest du die Items nicht einfach adden, sondern ab einer gewissen menge ein Insert(x) verwenden (x = zufällige Zahl <= Menge der bereits enthaltenen Einträge).

marabu 29. Nov 2005 18:46

Re: TStrings-Elemente zufällig anordnen
 
Hallo Marc,

wenn die Einträge in deiner ListBox schon vorgegeben sind dann hilft dir vielleicht dieser Code:

Delphi-Quellcode:
// Shuffle(ListBox.Items);

procedure Shuffle(sl: TStrings);
var
  i: integer;
begin
  for i := 1 to sl.Count - 1 do
    sl.Exchange(Pred(i), Pred(i + Random(sl.Count - i)));
end;
Grüße vom marabu

DevilsCamp 29. Nov 2005 18:59

Re: TStrings-Elemente zufällig anordnen
 
Zitat:

Zitat von marabu
Hallo Marc,

wenn die Einträge in deiner ListBox schon vorgegeben sind dann hilft dir vielleicht dieser Code:

Delphi-Quellcode:
// Shuffle(ListBox.Items);

procedure Shuffle(sl: TStrings);
var
  i: integer;
begin
  for i := 1 to sl.Count - 1 do
    sl.Exchange(Pred(i), Pred(i + Random(sl.Count - i)));
end;
Grüße vom marabu

Hey danke, das funzt prima...


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz