C# で一意のランダム値を生成する効果的な方法
一意の乱数を生成することは、多くのプログラミング シナリオで共通の要件です。ただし、デフォルトの System.Random
クラスを使用しても、特にスコープが小さい場合には、一意性は保証されません。
Random.Next() の制限事項
Random.Next()
メソッドは、指定された範囲内で一意の値を生成するように設計されていません。指定された範囲内でランダムな整数が生成され、特に範囲が狭い場合には重複した数値が生成される可能性があります。
シード値を使用する
DateTime.Now.Ticks.GetHashCode()
などのシード値を使用することは、Random
のようなランダム性を向上させる一般的な方法です。ただし、重複する番号が生成される可能性が完全に排除されるわけではありません。
より良い解決策
Random.Next()
に依存する代わりに、次の方法を使用して一意の乱数を生成することを検討してください:
<code class="language-csharp">public class RandomGenerator { private readonly Random _random; private HashSet<int> _uniqueValues; public RandomGenerator() { _random = new Random(); _uniqueValues = new HashSet<int>(); } public int GetUniqueNumber(int min, int max) { int randomNumber; do { randomNumber = _random.Next(min, max); } while (_uniqueValues.Contains(randomNumber)); _uniqueValues.Add(randomNumber); return randomNumber; } }</code>
このメソッドは、HashSet
を使用して生成された値を保存します。 GetUniqueNumber
メソッドは、指定された範囲内で一意の値が見つかるまで乱数を繰り返し生成します。これにより、Random
クラスを使用しながらも一意性が確保されます。
以上がC# で真に一意の乱数を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。