一意の乱数を生成することは、多くのプログラミング タスクにおいて重要です。 ただし、C# の組み込み System.Random
クラスは本質的に一意性を保証しません。 ある開発者が発見したように、Random
インスタンスが関数の外で宣言されている場合でも、これにより数値が重複する可能性があります。
問題とより良い解決策:
Random.Next()
で使用されるシードは、一意性を直接制御しません。 より効果的な戦略は次のとおりです:
独自性を高めるためにコレクションを活用する:
<code class="language-csharp">public Random a = new Random(); public List<int> randomList = new List<int>(); int MyNumber = 0; private void GenerateUniqueNumber() { MyNumber = a.Next(0, 10); if (!randomList.Contains(MyNumber)) randomList.Add(MyNumber); }</code>
カスタム乱数ジェネレーターの構築:
代替ライブラリの探索:
いくつかの代替手段により、改善された乱数生成が提供されます。
RandomNumberGenerator
: より暗号的に安全なオプション。Guid.NewGuid()
: 連続した一意性が重要ではない場合に適したグローバル一意識別子 (GUID) を生成します。System.Numerics.Tensors
内のジェネレーター: さまざまな分布にランダム サンプリング方法を提供します。最適なアプローチは、アプリケーションのニーズ、パフォーマンスの制約、必要なランダム性のレベルによって異なります。
以上がSystem.Random が失敗した場合、C# で一意の乱数を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。