Delphi/C++ Builder でリストをランダムに並び替え
リストをランダムに並び替えには、いろいろな方法が考えられるけど、先日作って使ったコード
Random 関数は (0 ≦ 戻り値 <引数) を返すので、リストの未処理カウンタから乱数を生成して、選ばれた物をリストの後方へ移動させるという理屈
TList 以外の TStringList, TStrings, Generics.Collections.TList でも、引数の型を変えればそのまま使えます
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;
コメント