Exigence: générer 10 000 numéros uniques composés d'un nombre séquentiel (16 chiffres) suivi d'une chaîne numérique aléatoire (4 chiffres). L'arme de choix est PowerShell parce que c'est le seul outil que j'ai une connaissance très limitée de. P>
problèmes rencontrés: p>
get-aléatoire -minum minimum 0001 -maximum minimum 9999 code> et les mettre dans une variable. Je ne parviens que pour obtenir 1 nombre aléatoire. Li>
- Combinant les deux variables à l'aide de l'objet Join (ou au moins c'est ce que j'espère pouvoir faire) li>
ol>
Comment puis-je combiner ces 3 commandes pour obtenir une liste de nombres semi-aléatoires tels que spécifiés ci-dessus? Ou est-il plus simple d'obtenir le même résultat? P>
3 Réponses :
L'algorithme classique pour créer une séquence unique consiste à mettre toutes les valeurs dans un tableau. Choisissez une valeur. Déplacez la dernière valeur du tableau dans l'endroit où vous venez de choisir la valeur. Ensuite, diminuez la taille de la matrice par une. Cela crée une copie du tableau, donc s'il y a beaucoup de valeurs, méfiez-vous des coûts supplémentaires causés par la redimensionnement d'un tableau.
Un exemple que les valeurs de 0 à 19 sont de même, P> Étant donné que la valeur ne correspond pas à int32, utilisez INT64. Pour ajouter les valeurs mélangées, une boucle fonctionne comme SO, P> PS C:\> $big
1400000000000015
1400000000000006
1400000000000010
1400000000000017
1400000000000009
1400000000000004
1400000000000005
1400000000000016
1400000000000014
1400000000000003
1400000000000001
1400000000000002
1400000000000013
1400000000000011
1400000000000012
1400000000000019
1400000000000000
1400000000000007
1400000000000008
1400000000000018
14000000000000004965 14000000000000010114 14000000000000026382 14000000000000038644 14000000000000045435 14000000000000052051 14000000000000061801 14000000000000077046 14000000000000087791 14000000000000098090 14000000000000102712 ....
La réponse de fer fournit une solution élégante.
Permettez-moi de le compléter en adressant des points 1. et 2. individuellement : P>
re 1. p>
Vous pouvez utiliser la méthode re 2. p> PowerShell [noyau] prend maintenant en charge le paramètre pas E: la valeur dans windows PowerShell em>, vous "LL doit appeler appeler une cmdlet dans une boucle est chère; Vous pouvez accélérer les choses sensiblement en utilisant le .. code>, Opérateur de plage prend en charge uniquement
[int] code> (
système.int32 < / Code>) (numériques) Les points d'extrémité (Incidemment, la même chose s'applique à LINQ's
plage code>
méthode). p> foreach () code> matrice pour contourner le problème, comme également montré dans la réponse de fer. p>
-Count code> pour < code> get-aléatoire code> qui vous permet de demander un nombre donné de nombres aléatoires entre les limites spécifiées. p>
-Maximum code> (contrairement au
-Minimum code>) est non em> -inclusive; c'est-à-dire que le nombre aléatoire le plus élevé pouvant être renvoyé est 1 inférieur em>,
9998 code>. p>
get-aléatoire code> dans une boucle: p>
System.Random < / code>
classe .NET directement: p>
Noté. Ces commentaires facilitent la compréhension des seuls opérateurs.
Pouvez-vous partager votre code jusqu'à présent?