Delphi/C++ Builder でリストをランダムに並び替え

リストをランダムに並び替えには、いろいろな方法が考えられるけど、先日作って使ったコード

Random 関数は (0 ≦ 戻り値 <引数) を返すので、リストの未処理カウンタから乱数を生成して、選ばれた物をリストの後方へ移動させるという理屈

1回目2回目3回目
[A]
[B]
[C] 乱数で選択→移動
[D]
[E]
[A]
[B] 乱数で選択→移動
[D] 
[E]
[C]
[A] 乱数で選択→移動
[D]
[E]
[B]
[C]

TList 以外の TStringList, TStrings, Generics.Collections.TList でも、引数の型を変えればそのまま使えます
  1. procedure RandomList(List: TList);  
  2.     var I: Integer;  
  3. begin  
  4.     for I := List.Count - 1 downto 1 do begin  
  5.         List.Move(Random(I + 1), I);  
  6.     end;  
  7. end;  

コメント