Maison >développement back-end >C++ >Comment générer des nombres aléatoires vraiment uniques en 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éthodeRandom.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!