D言語で配列をランダムに並び替えるときは、 std.random
の randomShuffle を使います。
import std.stdio;
import std.random;
void main(string[] args)
{
auto array = [0, 1, 2, 3, 4, 5];
array.randomShuffle();
writeln(array);
}
実行すると、[3, 4, 2, 1, 5, 0]
とか [0, 2, 3, 4, 1, 5]
とか表示されます。
本来(?)は randomShuffle(array)
と書くのですが、D言語では UFCS (Uniform Function Call Syntax) といって第一引数をあたかもオブジェクトであるかのように書けるシンタックスシュガーがあるので、私はいつもこう書いています。
また、第二引数には乱数生成器(RandomGen
)を渡すことができます。シミュレーションなど、再現性が必要なときに使うといいかもしれません。