Randomクラスでは、一つのインスタンスが一つの乱数系列として動作します。 またRandomクラスでは、個々のインスタンスに異なるシード値(seed, 乱数の種)を与えることにより、複数の乱数系列を生成することができます。
Randomクラスのコンストラクタでは、乱数系列のシード値を指定することができます。 このとき、同一のシード値を与えた場合は同一の乱数系列となり、同じ乱数を生成します。 これにより、インスタンスを生成したときのシード値を保存しておくことで、そのときと同じ乱数を生成するという使い方もできます。
シード値を指定してRandomクラスのインスタンスを作成する
using System;
class Sample {
static void Main()
{
var rand1 = new Random(0); // シード値(0)を与えてインスタンスを作成する
var rand2 = new Random(1);
var rand3 = new Random(1); // rand2と同じシード値のインスタンスを作成する
const string format = "{0,-6} {1,-6} {2,-6}";
Console.WriteLine(
format,
nameof(rand1),
nameof(rand2),
nameof(rand3)
);
// 各インスタンスから乱数を生成して表示する
for (var i = 0; i < 15; i++) {
Console.WriteLine(
format,
rand1.Next(0, 100),
rand2.Next(0, 100),
rand3.Next(0, 100)
);
}
}
}
実行結果
rand1 rand2 rand3 72 24 24 81 11 11 76 46 46 55 77 77 20 65 65 55 43 43 90 35 35 44 94 94 97 10 10 27 64 64 29 2 2 46 24 24 63 32 32 46 98 98 98 68 68