Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Stringlist nur leicht mischen? (https://www.delphipraxis.net/168069-stringlist-nur-leicht-mischen.html)

codipodi 3. Mai 2012 11:35

Delphi-Version: 5

Stringlist nur leicht mischen?
 
Hallo zusammen,
ich würde gerne eine Stringlist zufällig durchmischen. Soweit kein Problem, gibt es bereits:

Code:
procedure Shuffle(List: TStrings);
var
  i: Integer;
begin
  Randomize;
  List.BeginUpdate;
  try
    for i := 0 to Pred(List.Count) do
      List.Exchange(i, Random(List.Count));
  finally
    List.EndUpdate;
  end;
end;
Quelle: http://www.delphipraxis.net/110463-s...g-mischen.html

Mein Problem ist allerdings das ich die Liste nicht von vorne bis hinten auf den Kopf stellen möchte sondern nur leicht verändern will. Konkret geht es um eine Liste mit 1000 Einträgen.

Wie die Begrenzung genau aussehen soll lasse ich bewusst offen da ich nicht weiß welche sich am einfachsten umsetzen lässt. Mir würde z.B. einfallen das die Einträge sich um maximal 5 Plätze verschieben lassen oder in ihrer 10 Einheit bleiben (z.B. 88 darf nur von 81-90 verschoben werden).

Kann mir jemand weiterhelfen wie ich das realisieren kann? Random lässt sich ja nicht derart einschränken.

PS: Die Geschwindigkeit spielt keine Rolle.

Vielen Dank,

LG
Christian

SirThornberry 3. Mai 2012 11:47

AW: Stringlist nur leicht mischen?
 
Minimiere doch einfach die Anzahl wie oft getauscht wird.

jaenicke 3. Mai 2012 12:42

AW: Stringlist nur leicht mischen?
 
Zitat:

Zitat von codipodi (Beitrag 1164703)
Random lässt sich ja nicht derart einschränken.

Inwiefern nicht? Eigentlich geht das doch problemlos, dass du angibst in welchem Bereich die zu erzeugende Zahl liegen soll.

codipodi 3. Mai 2012 13:04

AW: Stringlist nur leicht mischen?
 
Vielen Dank für eure Antworten.

Zitat:

Zitat von SirThornberry (Beitrag 1164707)
Minimiere doch einfach die Anzahl wie oft getauscht wird.

Wenn ich das richtig verstanden habe, ist die Liste dann zwar weniger durchgemischt aber die Verschiebungen sind doch dennoch zu groß, oder nicht? Die einzelnen Strings sollen ja quasi in ihrem jeweiligen Gebiet bleiben und sich nur um wenige Plätze verschieben.

Zitat:

Zitat von jaenicke (Beitrag 1164714)
Inwiefern nicht? Eigentlich geht das doch problemlos, dass du angibst in welchem Bereich die zu erzeugende Zahl liegen soll.

Mist, da hast du mich erwischt. Ich war mir sicher das es mit Random nicht geht. Auf deinen Hinweis hin bin ich auf die Funktion RandomRange gestoßen. Damit lässt sich das Problem natürlich beheben.

Vielen Dank für die Hilfe :thumb:

LG
Christian

jaenicke 3. Mai 2012 13:23

AW: Stringlist nur leicht mischen?
 
Zitat:

Zitat von codipodi (Beitrag 1164717)
Ich war mir sicher das es mit Random nicht geht. Auf deinen Hinweis hin bin ich auf die Funktion RandomRange gestoßen. Damit lässt sich das Problem natürlich beheben.

RandomRange ruft intern auch nur Random auf. ;-)

Ein Beispiel:
Du willst einen Wert zwischen 110 und 120.
Heißt, 110 plus einen Wert zwischen 0 und 10.
Also:
Delphi-Quellcode:
110 + Random(10)
:idea:

(RandomRange ist natürlich vollkommen ok, ich wollte nur mal auf die Berechnung hinweisen. ;-))


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:28 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