ホームページ > バックエンド開発 > C++ > C# で真に一意の乱数を生成するにはどうすればよいですか?

C# で真に一意の乱数を生成するにはどうすればよいですか?

DDD
リリース: 2025-01-21 13:01:14
オリジナル
218 人が閲覧しました

How to Generate Truly Unique Random Numbers in C#?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート