Ich möchte eine Methode aufrufen, ihr die Länge übergeben und eine zufällige alphanumerische Zeichenfolge generieren lassen.
Gibt es Dienstprogrammbibliotheken, die möglicherweise eine Reihe solcher Funktionen enthalten?
objective-c
cocoa
string
random
alphanumeric
Station
quelle
quelle
NSString
zu verwenden,letters
wenn ein einfacheschar
Array gut funktionieren würde. Tatsächlich[letters characterAtIndex:(rand() % [letters length])]
scheint mir die Verwendung weniger prägnant zu sein als nurletters[rand() % strlen(letters)]
. Die Foundation-Klassen sind wirklich hilfreich, aber im einfachsten Fall können sie dazu dienen, unseren Code zu verschleiern, anstatt ihn zu verbessern.%C
stattdessen%c
, weilcharacterAtIndex:
einunichar
arc4random_uniform((int)[letters length])
Nicht genau das, was Sie fragen, aber dennoch nützlich:
Beispielausgabe:
quelle
quelle
alphabet
jedes Mal abfragen ? Es ist konstant und hängt nicht von der Schleife ab.NSArray
Caches seinlength
, sollte kein Leistungsengpass sein.Sicherlich können Sie dies kürzer machen:
quelle
Wenn Sie sich nur auf Hex-Zeichen beschränken möchten, können Sie am einfachsten eine UUID generieren:
Beispielausgabe :
16E3DF0B-87B3-4162-A1A1-E03DB2F59654
.Wenn Sie eine kleinere zufällige Zeichenfolge möchten, können Sie nur die ersten 8 Zeichen erfassen.
Es ist eine Version 4 UUID , die das erste Zeichen in der 3. und 4. Gruppe bedeutet , ist nicht zufällig (sie wird es immer sein
4
und einer von8
,9
,A
oderB
).Jedes andere Zeichen in der Zeichenfolge ist völlig zufällig und Sie können über Hunderte von Jahren jede Sekunde Millionen von UUIDs generieren, ohne dass das Risiko groß ist, dass dieselbe UUID zweimal generiert wird.
quelle
NSString *uuid = [UUID UUID]
Eine Kategorie-Version von Jeff Bs Antwort.
NSString + Random.h
NSString + Random.m
quelle
Sie können auch einfach eine UUID generieren. Obwohl sie nicht wirklich zufällig sind, sind sie komplex und einzigartig, was sie für die meisten Verwendungen zufällig erscheinen lässt. Generieren Sie eine Zeichenfolge und nehmen Sie dann einen Zeichenbereich, der der übergebenen Länge entspricht.
quelle
Schnell
quelle
64
durch einen berechneten ersetztupperBound
. Ich rechneupperBound
außerhalb des Blocks, weil ich denke, dass das besser funktioniert.Hier ist ein anderer Weg, um es anzugehen. Anstatt eine vorbereitete Zeichenfolge zu verwenden, können Sie zwischen Ganzzahlen und Zeichen wechseln und eine dynamische Liste der zur Auswahl stehenden Zeichen erstellen. Es ist ziemlich schlank und schnell, hat aber etwas mehr Code.
Wenn ich zufällige Zeichen generiere, arbeite ich lieber direkt mit ganzen Zahlen und übersetze sie, anstatt die Liste der Zeichen aufzuschreiben, aus denen ich zeichnen möchte. Wenn Sie die Variablen oben deklarieren, wird das System systemunabhängiger. Bei diesem Code wird jedoch davon ausgegangen, dass Zahlen einen niedrigeren Wert als Buchstaben und Großbuchstaben einen niedrigeren Wert als Kleinbuchstaben haben.
quelle
Alternative Lösung in Swift
quelle
Neben der guten Antwort von Melvin habe ich folgende Funktion ( in SWIFT! ) Erstellt , um eine zufällige Zeichenfolge zu erhalten:
Hier ist ein Testergebnis aus dem Aufruf
randomStringOfLength(10)
: uXa0igA8wmquelle
Erzeugt eine alphanumerische Zufallszeichenfolge in Kleinbuchstaben mit der angegebenen Länge:
quelle
Modifikation einiger Ideen hier und fertig Swift 4.0
Verwendung:
quelle
Wenn Sie eine zufällige Unicode-Zeichenfolge möchten, können Sie zufällige Bytes erstellen und dann die gültigen verwenden.
Die Konvertierung von NSString nach NSData und zurück ist erforderlich, um eine gültige UTF-8-Zeichenfolge zu erhalten. Beachten Sie, dass die Länge nicht unbedingt der Länge des am Ende erstellten NSString entspricht.
quelle
Ich habe dies mit einem einfachen
char[]
anstelle einesNSString *
für das Alphabet gemacht. Ich habe dies einer NSString-Kategorie hinzugefügt.quelle
quelle
Methode zum Aufrufen:
Methode:
Ergebnisse:
quelle
für Swift 3.0
quelle
quelle
Änderung für die Antwort von keithyip:
quelle