C# での一意の乱数の生成
質問:
C# 開発者は、一意の乱数を生成するという課題に直面することがよくあります。 System.Random と DateTime.Now.Ticks をシードとして使用する場合でも、数値の重複に関する問題が発生する可能性があります。この問題を解決する別の方法を提案してもらえますか?
答え:
Random.Next は一意性を保証しませんが、簡単な解決策は、生成された数値のリストを維持することです。以下のアルゴリズムは、これを実現する方法を示しています:
<code class="language-csharp">public Random a = new Random(); private List<int> randomList = new List<int>(); int MyNumber = 0; private void NewNumber() { MyNumber = a.Next(0, 10); if (!randomList.Contains(MyNumber)) randomList.Add(MyNumber); }</code>
このコードは、Random インスタンス (デフォルトで内部で行われるため、GetHashCode 呼び出しは必要ありません) と、生成された数値を保存するリストを初期化します。 NewNumber 関数は、0 から 9 までの乱数を生成します。数値がリストにない場合はリストに追加され、指定された範囲内で数値の一意性が保証されます。
以上がC# で一意の乱数を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。