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 でも、引数の型を変えればそのまま使えます
procedure RandomList(List: TList);
    var I: Integer;
begin
    for I := List.Count - 1 downto 1 do begin
        List.Move(Random(I + 1), I);
    end;
end;

コメント