AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stringlist nur leicht mischen?

Ein Thema von codipodi · begonnen am 3. Mai 2012 · letzter Beitrag vom 3. Mai 2012
Antwort Antwort
Benutzerbild von codipodi
codipodi

Registriert seit: 29. Apr 2012
Ort: Duisburg
16 Beiträge
 
Delphi 2007 Professional
 
#1

Stringlist nur leicht mischen?

  Alt 3. Mai 2012, 12:35
Delphi-Version: 5
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
Christian
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Stringlist nur leicht mischen?

  Alt 3. Mai 2012, 12:47
Minimiere doch einfach die Anzahl wie oft getauscht wird.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Stringlist nur leicht mischen?

  Alt 3. Mai 2012, 13:42
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von codipodi
codipodi

Registriert seit: 29. Apr 2012
Ort: Duisburg
16 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Stringlist nur leicht mischen?

  Alt 3. Mai 2012, 14:04
Vielen Dank für eure Antworten.

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.

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

LG
Christian
Christian
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Stringlist nur leicht mischen?

  Alt 3. Mai 2012, 14:23
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: 110 + Random(10)

(RandomRange ist natürlich vollkommen ok, ich wollte nur mal auf die Berechnung hinweisen. )
Sebastian Jänicke
AppCentral

Geändert von jaenicke ( 3. Mai 2012 um 14:27 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:14 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