Générer des trois caractères aléatoires dans Delphi
Salut, je suis en train de générer des trois caractères aléatoires à l'aide d'une fonction en Delphi, le code est: est-ce
function generate(cantidad: integer): string;
const
letras_mi = 'abcdefghijklmnopqrstuvwxyz';
const
letras_ma = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
const
numeros = '0123456789';
var
finalr: string;
begin
finalr := '';
finalr := finalr + IntToStr(Random(Length(letras_mi)) + 1);
finalr := finalr + IntToStr(Random(Length(letras_ma)) + 1);
finalr := finalr + IntToStr(Random(Length(numeros)) + 1);
Result := finalr;
end;
le problème, c'est que des choses comme 20142 moi quand je suis vraiment en attente de 3 caractères constante variables aléatoires.
- Êtes-vous censé faire quelque chose avec le passé en paramètre
cantidad
? - Cantidad est espagnol pour "quantité", donc je suppose que ce que nous avons ici est un extrait d'un plus grand fonction dans laquelle ce paramètre sert de point de fin d'une boucle FOR.
Vous devez vous connecter pour publier un commentaire.
Votre code est la conversion de nombre entier valeurs de l'indice pour les cordes. Notez que votre seule référence à votre constantes est de prendre de leur longueur. Vous indices de rendement plutôt que des caractères.
Vous pouvez réparer votre code en utilisant l'entier indices que vous générez pour des éléments de référence au sein de votre chaîne de constantes. Mason et Ken a montré comment faire.
Personnellement, je le ferais de suite avec les constantes et écrire
et
et
Les valeurs ordinales de ces personnages ont été conçus à cette époque pour permettre un tel code.
Release
mais encore confirmé il y a quelques optimisation de passe, et ma théorie est fausse.Vous êtes en ajoutant le résultat de
Random
à votrefinalr
, pas la lettre aléatoire à partir de l'une des constantes.Essayer quelque chose comme cela au lieu de cela, il utilise le retour de
Random
que l'index de la constante chaîne de caractères:Regardons ce que votre code est en train de faire, comme un compilateur voit:
IntToStr prend un nombre (comme
5
) et la transforme en une chaîne de caractères (comme'5'
). Ce que vous voulez faire est d'utiliser la valeur aléatoire à l'index dans votre tableau, comme suit:Moyen plus rapide serait d'éviter la ré-allocation de la mémoire de temps en temps.
Et parfois même légèrement plus rapide serait d'utiliser une variable locale pour éviter quelques
UniqueString
appels pour var-paramètreResult
.Cependant timings ou CPU-niveau de code de vérification devrait être faite pour un compilateur spécifique de la version et les options pour voir quelle différence cela fait, le cas échéant.
PS. Ord est une approche aussi mieux ici que de choisir un char de tableau/la chaîne, mais qui est indépendant de la question. Aussi, je serais méfiant à l'utilisation
Chr
fonction avec Delphi 2009 ou plus récent, il ne serait que de l'uniforme de travail de #0..n ° 127 valeurs. Explicitement déclaré typecasts commeAnsiChar(i)
etWideChar(i)
pourraient être plus stable substituer en cause un jour vous auriez besoin de lettres à l'extérieur de 7 bits sous-intervalle, comme eña et d'autres pays Européens spécifiques.+
de l'opérateur.Chr
fonctionne très bien sur les valeurs0..65535
en Unicode Delphi.Cela va générer des chaînes aléatoires qui ressemble à des mots.
Donc, l'utiliser comme ceci: GenerateRandomWord(3);