als u wilt leren hoe u willekeurige getallen & tekenreeksen genereert in Ruby, dan bent u op de juiste plaats.
want dat is precies waar dit artikel over gaat!
met een willekeurig getal kunt u een willekeurig element uit een array kiezen, een winnaar uit een lijst kiezen, dobbelstenen rollen genereren, enz.
in Ruby zijn er vele manieren om willekeurige getallen met verschillende eigenschappen te genereren.
bijvoorbeeld …
de rand-methode kan op 3 manieren worden gebruikt:
- Zonder argumenten,
rand
geeft u een floating point getal tussen 0 & 1 (zoals 0.4836732493) - Met een integer argument (
rand(10)
) krijgt u een nieuw getal in tussen 0 & dat getal - Met een argument bereik (
rand(1..20)
) u krijgt een geheel getal tussen de start van het bereik & het einde van de reeks
Andere manieren voor het genereren van willekeur in Ruby zijn:
- De Matrix#schud de methode
- Array#sample methode
- De SecureRandom klasse
Laten we gaan over een aantal voorbeelden!
willekeurige getallen genereren
u kunt willekeurige getallen met Ruby genereren met behulp van de rand-methode:
Rand produceert floating-point getallen (0.4836732493
) indien aangeroepen zonder argumenten.
u kunt een argument doorgeven aan rand
om een getal te genereren vanaf nul tot (maar niet inclusief) dat getal.
rand 100> 41
het genereren van willekeurige Ruby-getallen is heel eenvoudig, maar wat als u het getal in een specifiek bereik wilt hebben in plaats van vanaf nul te beginnen?
geen probleem!
u kunt een bereik gebruiken om precies te krijgen wat u nodig hebt.
voorbeeld:
rand 200..500> 352
Secure Ruby Random Numbers
de nummers die door rand worden geproduceerd kunnen voldoende zijn voor een eenvoudige toepassing …
… maar als u ze wilt gebruiken voor beveiligingsdoeleinden-zoals het genereren van een wachtwoord reset token— dan moet u SecureRandom gebruiken, dat deel uitmaakt van de Ruby standard library.
SecureRandom seeds zijn generator van /dev/urandom op Unix systemen & op windows gebruikt het de CryptAcquireContext / CryptGenRandom API.
hier is een voorbeeld:
require 'securerandom'SecureRandom.random_number> 0.232
zoals u kunt zien werkt dit net als rand
, kunt u ook een maximum getal doorgeven.
voorbeeld:
SecureRandom.random_number(100)> 72
SecureRandom heeft andere uitvoerformaten beschikbaar.
met hex
kan een hexadecimale string met vaste breedte worden gegenereerd.
SecureRandom.hex> "87694e9e5231abca6de39c58cdfbe307"
Ruby 2.5 introduceerde een nieuwe methode, die willekeurige alfanumerieke tekenreeksen produceert:
SecureRandom.alphanumeric> "PSNVXOeDpnFikJPC"
hoe willekeurige elementen te kiezen uit Arrays
nu:
u wilt misschien een willekeurige keuze uit een lijst.
u kunt dit proberen:
.shuffle.first> 30
Maar Ruby heeft het monster methode die beter aansluit (en sneller) voor deze taak:
.sample> 5
U kunt gebruik maken van de steekproef voor het bereiken van deze code genereert een willekeurige letter:
('a'..'z').to_a.sample> b
U kunt pas een integer argument om een sample te krijgen N unieke elementen van de array:
.sample(2)>
Het is ook mogelijk om een aangepaste random generator als argument:
.sample(random: SecureRandom)
Ruby Willekeurige Strings
De ultieme willekeur toepassing is voor het genereren van een random string met een aangepaste tekenset. Hier is de code:
def generate_code(number) charset = Array('A'..'Z') + Array('a'..'z') Array.new(number) { charset.sample }.joinendputs generate_code(20)
er zijn hier een paar dingen aan de hand.
eerst bereiden we onze tekenset voor met behulp van bereiken en converteren ze naar arrays. Dan maken we gebruik van het aanroepen van Array.new
met een blok, waardoor we een array van grootte n kunnen initialiseren met de waarden die door het blok worden geproduceerd.
deze code zal tekenreeksen produceren met de volgende vorm: TufwGfXZskHlPcYrLNKg
.
u kunt de tekenset aanpassen aan uw behoeften.
Seeding the Random Number Generator
Als u wilt bepalen welke getallen worden gegenereerd met behulp van een methode als rand
dan kunt u de seed instellen.
Wat is het zaad?
het beginpunt is een getal dat een reeks willekeurige getallen start.
alle gegenereerde getallen zijn afgeleid van deze seed.
daarom is de kwaliteit van het zaad meestal de sleutel tot het produceren van een goede volgorde van willekeurige getallen.
Ruby zorgt daar al voor (gebruik SecureRandom
als je extra beveiliging nodig hebt), maar in sommige scenario ‘ s (meestal het testen van & debuggen) kun je deze seed misschien zelf instellen.
u kunt dit doen met de srand
methode.
Kernel.srand(1)
met deze seed weet u precies welke nummers De generator U gaat geven.
voor het getal 1 als zaad:
Array.new(5) { rand(1..10) }#
stel je het zaad weer in op 1, dan begint de reeks bij 6, dan 9, 10, enz.
conclusie
dat is het! U bent nu klaar om willekeur te gebruiken in uw Ruby-programma ‘ s 🙂
vond u dit bericht nuttig?
deel het met je vrienden & schrijf je in voor mijn nieuwsbrief zodat je niets nieuws mist!