Thema: Shuffle algo

Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#11

AW: Shuffle algo

  Alt 25. Jun 2019, 21:36
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..

gruss

Geändert von EWeiss (26. Jun 2019 um 11:48 Uhr)
  Mit Zitat antworten Zitat