Generieren Sie drei zufällige Zeichen in Delphi
Hallo, ich bin versucht zu generieren, die drei zufällige Zeichen mit einer Funktion in Delphi, der code ist:
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;
das problem ist, dass Dinge wie 20142 mich zurück, wenn ich eigentlich warten 3 Zeichen-Konstante Zufallsvariablen.
- Werden Sie etwas tun soll mit der übergebenen parameter
cantidad
? - Cantidad ist Spanisch für "Menge", also gehe ich davon aus, dass das, was wir hier haben, ist ein Ausschnitt aus einer größeren Funktion, in dem dieser parameter dient als Endpunkt einer FOR-Schleife.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Deinem code ist die Konvertierung von integer-index-Werte in Zeichenfolgen. Beachten Sie, dass Ihr nur den Verweis auf Ihre Konstanten ist Ihre Länge. Sie return Indizes eher als Zeichen.
Könnte man fix den code, indem die ganzzahligen Indizes generieren Sie referenzieren die Elemente der string-Konstanten. Mason und Ken zeigte auf, wie das zu tun.
Ich persönlich würde tun, Weg mit der Konstanten und schreiben
und
und
Die ordinale Werte dieser Zeichen wurden entwickelt, Weg zurück, wenn für einen solchen code.
Release
aber dennoch bestätigt, gibt es einige Optimierung geht, und meine Theorie war falsch.Hinzufügen das Ergebnis
Random
zu Ihremfinalr
, nicht die zufällig ausgewählten Buchstaben aus der Konstanten.Probieren Sie etwas wie dies stattdessen verwendet es die Rückkehr von
Random
wie der index in den string-Konstanten Zeichen:Schauen wir uns an, was dein code macht, da ein compiler, der es sieht:
IntToStr nimmt eine Anzahl (wie
5
) und wandelt es in einen string (wie etwa'5'
). Was Sie tun möchten, verwenden Sie die random-Wert zu index in das array, etwa so:Schneller Weg wäre die Vermeidung von re-Allokation von Speicher und Zeit wieder.
Und manchmal sogar etwas schneller wäre mit lokalen Variablen zu vermeiden, einige zusätzliche
UniqueString
fordert var-parameterResult
.Allerdings timings oder CPU-level-code-check gemacht werden sollte für eine bestimmte compiler-version und Optionen, um zu sehen, welchen Unterschied das eigentlich macht, wenn überhaupt.
PS. Ord-basierten Ansatz ist auch hier besser als die Kommissionierung ein char aus array/string, aber das Problem ist unabhängig. Auch würde ich vorsichtig sein, zu verwenden
Chr
Funktion mit Delphi 2009 oder neuer, es würde nur funktionieren, uniform auf #0..#127 Werte. Ausdrücklich erklärt Typumwandlungen wieAnsiChar(i)
undWideChar(i)
könnte stabiler sein Ersatz, verursachen Sie eines Tages brauchen würde, die Briefe außerhalb von 7-bit-Teilbereich, wie eña und anderen europäischen-spezifische.+
Betreiber.Chr
funktioniert auf Werte0..65535
im Unicode-Delphi.Dieser generiert zufällige Zeichenfolgen, die sieht aus wie Worte.
Also, verwenden Sie es so: GenerateRandomWord(3);