Wenn Sie lernen möchten, wie Sie Zufallszahlen & Zeichenfolgen in Ruby generieren, sind Sie hier richtig.
Denn genau darum geht es in diesem Artikel!
Mit einer Zufallszahl können Sie ein zufälliges Element aus einem Array auswählen, einen Gewinner aus einer Liste auswählen, Würfelwürfe generieren usw.
In Ruby gibt es viele Möglichkeiten, Zufallszahlen mit verschiedenen Eigenschaften zu generieren.
Zum Beispiel…
Die Rand-Methode kann auf 3 Arten verwendet werden:
- Ohne Argumente,
rand
gibt Ihnen eine Gleitkommazahl zwischen 0 & 1 (wie 0.4836732493) - Mit einem Integer-Argument (
rand(10)
) erhalten Sie eine neue Ganzzahl zwischen 0 & diese Zahl - Mit einem Range-Argument (
rand(1..20)
) erhalten Sie eine Ganzzahl zwischen anfang des Bereichs & das Ende des Bereichs
Andere Möglichkeiten, Zufälligkeit in Ruby zu generieren, sind:
- Die Array#Shuffle-Methode
- Die Array#Sample-Methode
- Die SecureRandom-Klasse
Lassen Sie uns einige Beispiele durchgehen!
Zufallszahlen generieren
Sie können Ruby-Zufallszahlen mit der Rand-Methode generieren:
Rand erzeugt Gleitkommazahlen (0.4836732493
), wenn sie ohne Argumente aufgerufen werden.
Sie können ein Argument an rand
übergeben, um eine Zahl von Null bis (aber nicht einschließlich) dieser Zahl zu generieren.
rand 100> 41
Die Generierung von Ruby-Zufallszahlen ist wirklich einfach, aber was ist, wenn die Zahl in einem bestimmten Bereich liegen muss, anstatt bei Null zu beginnen?
Kein Problem!
Sie können einen Bereich verwenden, um genau das zu erhalten, was Sie benötigen.
Beispiel:
rand 200..500> 352
Sichere Ruby-Zufallszahlen
Die von rand erzeugten Zahlen könnten für eine einfache Anwendung ausreichen …
… aber wenn Sie sie für Sicherheitszwecke verwenden möchten — wie das Generieren eines Token zum Zurücksetzen des Kennworts -, sollten Sie SecureRandom , das Teil der Ruby-Standardbibliothek ist.
SecureRandom seeds seinen Generator von /dev/urandom auf Unix-Systemen & unter Windows verwendet es die CryptAcquireContext / CryptGenRandom API.
Hier ist ein Beispiel:
require 'securerandom'SecureRandom.random_number> 0.232
Wie Sie sehen können, funktioniert dies sehr ähnlich wie rand
, Sie können auch eine Max-Nummer übergeben.
Beispiel:
SecureRandom.random_number(100)> 72
SecureRandom hat andere Ausgabeformate zur Verfügung.
Mit hex
kann eine hexadezimale Zeichenfolge mit fester Breite generiert werden.
SecureRandom.hex> "87694e9e5231abca6de39c58cdfbe307"
Ruby 2.5 führte eine neue Methode ein, die zufällige alphanumerische Zeichenfolgen erzeugt:
SecureRandom.alphanumeric> "PSNVXOeDpnFikJPC"
So wählen Sie zufällige Elemente aus Arrays aus
Jetzt:
Möglicherweise möchten Sie eine zufällige Auswahl aus einer Liste treffen.
Sie können dies versuchen:
.shuffle.first> 30
Aber Ruby hat die Beispielmethode, die für diese Aufgabe besser geeignet (und schneller) ist:
.sample> 5
Sie können sample für Bereiche verwenden, dieser Code generiert einen zufälligen Buchstaben:
('a'..'z').to_a.sample> b
Sie können ein Integer-Argument an sample übergeben, um N eindeutige Elemente aus dem Array abzurufen:
.sample(2)>
Es ist auch möglich, einen benutzerdefinierten Zufallsgenerator als Argument zu übergeben:
.sample(random: SecureRandom)
Ruby Random Strings
Die ultimative Zufallsanwendung besteht darin, eine zufällige Zeichenfolge mit einem benutzerdefinierten Zeichensatz zu generieren. Hier ist der Code:
def generate_code(number) charset = Array('A'..'Z') + Array('a'..'z') Array.new(number) { charset.sample }.joinendputs generate_code(20)
Hier sind ein paar Dinge los.
Zuerst bereiten wir unseren Zeichensatz mit Bereichen vor und konvertieren sie in Arrays. Dann nutzen wir den Aufruf von Array.new
mit einem Block, mit dem wir ein Array der Größe n mit den vom Block erzeugten Werten initialisieren können.
Dieser Code erzeugt Zeichenfolgen der folgenden Form: TufwGfXZskHlPcYrLNKg
.
Sie können den Zeichensatz an Ihre Bedürfnisse anpassen.
Seeding des Zufallszahlengenerators
Wenn Sie steuern möchten, welche Zahlen bei Verwendung einer Methode wie rand
generiert werden, können Sie den Seed festlegen.
Was ist der Samen?
Der Startwert ist eine Zahl, die eine Folge von Zufallszahlen startet.
Alle generierten Zahlen werden von diesem Seed abgeleitet.
Deshalb ist die Qualität des Samens normalerweise der Schlüssel zur Erzeugung einer guten Folge von Zufallszahlen.
Ruby erledigt das bereits für Sie (verwenden Sie SecureRandom
, wenn Sie zusätzliche Sicherheit benötigen), aber in einigen Szenarien (hauptsächlich Testen von & Debugging) möchten Sie diesen Seed möglicherweise selbst festlegen.
Sie können dies mit der srand
-Methode tun.
Kernel.srand(1)
Mit diesem Seed wissen Sie genau, welche Zahlen der Generator Ihnen geben wird.
Für die Zahl 1 als Samen:
Array.new(5) { rand(1..10) }#
Wenn Sie den Startwert erneut auf 1 setzen, beginnt die Sequenz bei 6, dann bei 9, 10 usw.
Fazit
Das war’s! Sie sind jetzt bereit, Zufälligkeit in Ihren Ruby-Programmen zu verwenden 🙂
Fand diesen Beitrag nützlich?
Teile es mit deinen Freunden & Abonniere meinen Newsletter, damit du nichts Neues verpasst!