Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Shuffle algo (https://www.delphipraxis.net/201131-shuffle-algo.html)

EWeiss 25. Jun 2019 21:36

AW: Shuffle algo
 
Ich denke das ist die Lösung für mich weil das sortieren der Liste zusätzlich zu lange dauert bei jeden Titel aufs neue.
Danke..

Delphi-Quellcode:
function TBassPlayer.ListShuffle(LView: ISkinListView): Integer;
type
  TArrayElement = Integer;
  TArray = array of TArrayElement;
var
  FisherYates: TArray;
  ListCount: Integer;

  procedure FillArray(var aArray: TArray; const cStart: Integer = 0);
  var
    i: Integer;
  begin
    for i := Low(aArray) to High(aArray) do
    aArray[i] := i + cStart;
  end;

  function ShuffleFisherYates(var aArray: TArray): Integer;
  var
    i,j: Integer;
    tmp: TArrayElement;
  begin
    // alle Elemente des Feldes durchlaufen
    for i := Low(aArray) to High(aArray) do begin
      // neue, zufällig Position bestimmen
      j := i +Random(Length(aArray) -i +Low(aArray));
      // Element Nr. i mit Nr. j vertauschen (3ecks-Tausch)
      tmp := aArray[j];
      aArray[j] := aArray[i];
      aArray[i] := tmp;
    end;
    Result := aArray[0];
  end;

begin

  ListCount := LView.Count(LView.Handle);
  SetLength(FisherYates, ListCount);
  FillArray(FisherYates);

  Result := ShuffleFisherYates(FisherYates);

end;
Heino ist gone.. :lol:

gruss

p80286 26. Jun 2019 09:21

AW: Shuffle algo
 
Du hast aber bei
Delphi-Quellcode:
Random()
vorher ein
Delphi-Quellcode:
randomize
durchgeführt?

Und dann gibt es ja noch die Möglichkeit sich die letzten 5,10... Indices zu merken und bei Wiederholung einen neuen anzufordern.

Gruß
K-H

EWeiss 26. Jun 2019 09:54

AW: Shuffle algo
 
Zitat:

Zitat von p80286 (Beitrag 1435363)
Du hast aber bei
Delphi-Quellcode:
Random()
vorher ein
Delphi-Quellcode:
randomize
durchgeführt?

Und dann gibt es ja noch die Möglichkeit sich die letzten 5,10... Indices zu merken und bei Wiederholung einen neuen anzufordern.

Gruß
K-H

Ja wenn meine Classe erstellt wird..

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:09 Uhr.
Seite 2 von 2     12   

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