Maison >développement back-end >C++ >Comment puis-je générer des nombres aléatoires uniques en C# lorsque System.Random échoue ?

Comment puis-je générer des nombres aléatoires uniques en C# lorsque System.Random échoue ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-21 13:07:12514parcourir

How Can I Generate Unique Random Numbers in C# When System.Random Fails?

Relever le défi de la génération de nombres aléatoires uniques en C#

La génération de nombres aléatoires uniques est essentielle dans de nombreuses tâches de programmation. Cependant, la classe System.Random intégrée de C# ne garantit pas intrinsèquement l'unicité. Cela peut conduire à des numéros en double, comme l'a découvert un développeur, même lorsque l'instance Random est déclarée en dehors de la fonction.

Le problème et une meilleure solution :

La graine utilisée avec Random.Next() ne contrôle pas directement l'unicité. Voici une stratégie plus efficace :

  1. Tirer parti des collections pour un caractère unique :

    • Maintenez une liste pour stocker les numéros générés.
    • Avant d'ajouter un numéro nouvellement généré, vérifiez s'il existe déjà dans la liste. Ajoutez-le seulement s'il est unique.
    <code class="language-csharp">public Random a = new Random();
    public List<int> randomList = new List<int>();
    int MyNumber = 0;
    private void GenerateUniqueNumber()
    {
        MyNumber = a.Next(0, 10);
        if (!randomList.Contains(MyNumber))
            randomList.Add(MyNumber);
    }</code>
  2. Création d'un générateur de nombres aléatoires personnalisé :

    • Créez un générateur personnalisé pour garantir l'unicité dans une plage définie. Cela nécessite un examen attentif des cas extrêmes et une optimisation des performances.

Explorer les bibliothèques alternatives :

Plusieurs alternatives offrent une génération améliorée de nombres aléatoires :

  • RandomNumberGenerator : Une option plus sécurisée cryptographiquement.
  • Guid.NewGuid() : Génère des identifiants globalement uniques (GUID), adaptés lorsque l'unicité séquentielle n'est pas cruciale.
  • Générateurs au sein de System.Numerics.Tensors : Fournit des méthodes d'échantillonnage aléatoire pour diverses distributions.

La meilleure approche dépend des besoins de l'application, des contraintes de performances et du niveau de caractère aléatoire requis.

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