は、私は、リストからランダムな要素を選択するためにこのコードを使用しています:リストからランダムなエントリを選択するにはどうすればよいですか?
var rand = new Random();
var i = rand.Next(words.Count);
keyword = words[i].keyword;
これは、これを行うための最適な方法ですか私が採用する可能性がより良い方法はありますか?私が特に心配しているのは、これは完全にランダムなのでしょうか?
は、私は、リストからランダムな要素を選択するためにこのコードを使用しています:リストからランダムなエントリを選択するにはどうすればよいですか?
var rand = new Random();
var i = rand.Next(words.Count);
keyword = words[i].keyword;
これは、これを行うための最適な方法ですか私が採用する可能性がより良い方法はありますか?私が特に心配しているのは、これは完全にランダムなのでしょうか?
これは無条件に無作為になります。ではなく、の番号を必要とするたびに新しいRandom
インスタンスを作成する必要があります。それはジェネレータの統計的性質を完全に破壊します。
でも、完璧なランダム性は得られません(そのためには外部ハードウェアが必要です)が、ランダム性の主要な性質をすべて満たす必要があります。
複数の乱数を作成する場合は、ランダムインスタンスを保持して再利用する必要があります。 時間が近すぎる新しいインスタンスを作成すると、乱数ジェネレータがシステムクロックからシードされるのと同じ一連の乱数が生成されます。
新しいRandom()を実行するたびに、初期化されます。つまり、タイトなループでは、同じ価値を何度も得ることになります。あなたは単一のランダムインスタンスを保持し、同じインスタンス上で次を使用し続ける必要があります。
単一時の初期化のために、この行を入れます。新しい番号を毎回生成するコードの下var rand = new Random();
使用を。
var i = rand.Next(words.Count);
keyword = words[i].keyword;
ご希望の場合はお手数ですが、
ランダムは「完全にランダム」です。 –
ランダムなエントリを選択するたびに、リストの要素のインデックスをランダム化するのはどうですか? – CodeWalker