Générer des valeurs uniques et aléatoires C #
J'ai cherché pendant un certain temps et de la difficulté à trouver cela, je suis en train de générer de l'aléatoire de plusieurs, uniques numéros de C#. Je suis en utilisant le Système.Hasard, et je suis en utilisant un datetime.maintenant.tiques de la graine:
public Random a = new Random(DateTime.Now.Ticks.GetHashCode());
private void NewNumber()
{
MyNumber = a.Next(0, 10);
}
Je vais appeler NewNumber() régulièrement, mais le problème est que je reçois souvent des chiffres répétés. Certaines personnes ont suggéré parce que j'étais en déclarant de façon aléatoire à chaque fois que je l'ai fait, il ne serait pas produire un nombre aléatoire, donc j'ai mis de la déclaration en dehors de ma fonction. Toutes les suggestions ou de meilleurs moyens que d'utiliser le Système.Aléatoire ? Merci
source d'informationauteur Christian Peut
Vous devez vous connecter pour publier un commentaire.
Random.Next
n'est pas guarntee le numéro unique. Aussi votre plage est de 0 à 10, et les chances sont que vous allez obtenir des valeurs en double. Peut-être vous pouvez configurer une liste deint
et insérer des nombres aléatoires dans la liste après vérification si elle ne contient pas de doublons. Quelque chose comme:Vous pouvez essayer de brouiller un éventail d'ints si votre portée est seulement de 0 à 9. Cela ajoute l'avantage d'éviter tous les conflits dans le numéro de génération.
Je poste une correcte mise en œuvre d'un algorithme de shuffle, depuis l'autre posté ici n'est pas de produire un uniforme shuffle.
Que l'autre réponse, les états, pour un petit nombre de valeurs à randomisés, il vous suffit de remplir un tableau avec ces valeurs, shuffle le tableau, puis utilisez toutefois, nombreux sont les valeurs que vous voulez.
Ce qui suit est une mise en œuvre de la Shuffle De Fisher-Yates (aka le Knuth Shuffle). (Lire la "mise en œuvre des erreurs de" section de ce lien (de la recherche pour "toujours sélectionnant j à partir de l'ensemble de la gamme valide indices de tableau à chaque itération") pour voir une discussion à propos de ce qui est mal avec les autres de la mise en œuvre posté ici.)
REMARQUE, je n'ai pas recommander cet :).
Voici une "oneliner":
Selon ce que vous êtes vraiment après vous pouvez faire quelque chose comme ceci:
Et voici ma version de trouver N aléatoire de numéros uniques à l'aide de HashSet.
Semble assez simple, depuis HashSet peut contenir que des éléments différents.
C'est intéressant, serait-il plus rapide, puis en utilisant la Liste ou le générateur de nombre?
Vérifier ce prêt-à-utiliser la méthode: Donner dans une gamme & nombre de nombre que vous souhaitez obtenir.
Vous pouvez également utiliser un dataTable le stockage de chaque valeur aléatoire, alors il vous suffit d'exécuter la méthode aléatoire tout != les valeurs dans la dataColumn
Vous pouvez utiliser des Fonctions Aléatoires de C#
vous pouvez maintenant utiliser la valeur de l'randomno dans tout ce que vous voulez, mais gardez à l'esprit que cela va générer un nombre aléatoire entre
0
et100
Seulement et vous pouvez prolonger que de toute la figure.Essayez ceci:
Certains Explnations:
Guid
: base sur ici : Représente un identificateur global unique (GUID)Guid.newGuid()
produit un identifiant unique comme"936DA01F-9ABD-4d9d-80C7-02AF85C822A8"
et il est unique dans tout l'univers base sur ici
Code de hachage ici produire un unique entier à partir de notre identifiant unique
donc
Guid.newGuid().GetHashCode()
nous donne un numéro unique et le hasard de classe va produire de vrais nombres aléatoires de se débarrasser de cette