Maison >développement back-end >C++ >Comment générer des nombres aléatoires vraiment uniques en C# ?

Comment générer des nombres aléatoires vraiment uniques en C# ?

DDD
DDDoriginal
2025-01-21 13:01:14282parcourir

How to Generate Truly Unique Random Numbers in C#?

Moyen efficace de générer des valeurs aléatoires uniques en C#

Générer des nombres aléatoires uniques est une exigence courante dans de nombreux scénarios de programmation. Cependant, l'utilisation de la classe System.Random par défaut ne garantit pas l'unicité, surtout si la portée est petite.

Limitations de Random.Next()

La méthode

Random.Next() n'est pas conçue pour générer des valeurs uniques dans une plage donnée. Il génère un entier aléatoire dans la plage spécifiée et peut produire des nombres en double, surtout si la plage est petite.

Utiliser la valeur de départ

L'utilisation d'une valeur de départ, telle que DateTime.Now.Ticks.GetHashCode(), est un moyen courant d'améliorer le caractère aléatoire de type Random. Cependant, cela n’élimine toujours pas la possibilité de générer des numéros en double.

Meilleure solution

Au lieu de vous fier à Random.Next(), envisagez d'utiliser la méthode suivante pour générer des nombres aléatoires uniques :

<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>

Cette méthode utilise HashSet pour stocker la valeur générée. La méthode GetUniqueNumber génère à plusieurs reprises des nombres aléatoires jusqu'à ce qu'une valeur unique soit trouvée dans la plage spécifiée. Cela garantit l’unicité tout en utilisant la classe Random.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn