リストのランダム化には多くの問題がありました。私はリストをシャッフルしたい200の要素のリストについて話しています。誤解しないで、私は例をたくさん読んで、そして一見にかなりいいものがあり、このような:C#ランダムコード - そのほとんどは間違っていますか?
しかし、私の経験では、少なくとも高速なマシンで、これがあります基本的に価値がない。シャッフルは非常に速く動作し、Random.NEXT()への2回の呼び出しの間にMS遅延がないため、ほとんどランダムではない動作になります。
私はスーパーセキュアなものについて話しているわけではなく、基本的なゲームはランダムです。私は1 MSの遅延を追加することができますが、これは単にリストをランダム化するために200 MSを "無駄にする"ことを意味します。
は今、私はこのアプローチを見つけた:http://www.codinghorror.com/blog/2007/12/shuffling.html
それはソートするためにGUIDを使用して、良さそうに見えます。しかし、彼らは同じように作成されていませんか?ノッチそれをステップアップすることができます0の間、私は1000個の数字を作成したいと仮定することができます - このコードは、基本的に役に立たない5.:
var resultA = new List<int>();
for (int i = 0; i < 1000; i++)
{
resultA.Add(new Random().Next(5));
}
var resultB = new List<int>();
for (int i = 0; i < 1000; i++)
{
resultB.Add(new Random().Next(5));
Thread.Sleep(1);
}
Aがまったく動作しない、少なくともWindowsの携帯電話に私の環境イムありません、 7. Bは大丈夫ですが、それはまた愚かです秒を要します。任意のコメントや思考、整数のランダムなリストを作成することは難しくありません:
ああ、私は本当に今の自分自身を憎む[OK]を:-)、それを説明している...まあそこが作成された新しいランダム(それぞれの質問を使用する意味があったいくつかの問題があったが、それはアイテムを配置すべきです1-4で、問題は全体を世話しました)しかし、彼らは速くするために作成されました.Ok、とにかく感謝、私のばかな間違いを持っています! –
あなたが参照した質問のシャッフル拡張を使用するか、Jon Skeetの実装を見つけることができるかどうかを確認するには、別の質問があります。同じRNGでNext()を連続して呼び出すと、通常は異なる値が返されます(ただし、定期的に重複が発生する可能性があるため「ランダム」です)。 – tvanfosson
ええ、質問では、ランダムジェネレータを親オブジェクト(ゲーム)に移動するだけで問題はありません。しかし、それでも、あなたはこの愚かな間違いをどれくらいの間検索することができて面白いのですか?そして、私は "乱数"がそれほど難しくないと確信していました。 –