Thema: Shuffle algo

Einzelnen Beitrag anzeigen

peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Shuffle algo

  Alt 25. Jun 2019, 17:26
Meine Shuffle function
Delphi-Quellcode:
{$REGION 'function ListShuffle'}

function TBassPlayer.ListShuffle(LView: ISkinListView): Integer;
var
  Inx: Integer;
  RandomInx: Integer;
  RandomIndex: Integer;
  ListCount: Integer;
begin
  RandomIndex := 0;
  result := 0;

  ListCount := LView.Count(LView.Handle);

  for Inx := 0 to ListCount - 1 do
  begin
    begin
      RandomInx := Random(ListCount);
      if (RandomInx <> Inx) then
        RandomIndex := RandomInx;
    end;
    if RandomIndex = LView.GetCurSel(LView.Handle) then
      RandomIndex := RandomIndex + 1;

    result := RandomIndex;
  end;
end;
{$ENDREGION}
Wie kann man diesen verbessern so das nicht so oft immer wieder der 1 Listeintrag abgespielt wird?
Heino nervt langsam..

gruss
Du machst das viel zu kompliziert. Dein Algorithmus shuffled nichts, das würde ja bedeuten, das er die Reihenfolge der Items in der Liste willkürlich verändert. Das scheint aber nicht die Absicht zu sein. Wenn Du nur einen der Einträge zufällig auswählen willst ist die for-Schleife völlig unsinnig, sorry. Alles was Du braucht ist

Delphi-Quellcode:
  RandomInx := Random(ListCount);
  if (RandomInx <> Inx) then begin
      result := RandomInx;
    exit;
  end;
Peter Below
  Mit Zitat antworten Zitat