hvis du vil lære å generere tilfeldige tall & strenger i Ruby, så er du på rett sted.
Fordi det er akkurat hva denne artikkelen handler om!
med et tilfeldig tall kan du velge et tilfeldig element fra en matrise, velge en vinner fra en liste, generere terningkast, etc.
I Ruby er det mange måter å generere tilfeldige tall med ulike egenskaper.
for eksempel…
rand-metoden kan brukes på 3 måter:
- uten argumenter,
rand
gir deg et flyttall mellom 0 & 1 (som 0,4836732493) - Med et heltallargument (
rand(10)
) får du et nytt heltall mellom 0 & det tallet - med et områdeargument (
rand(1..20)
) du får en heltall mellom starten av området & slutten av Området
andre måter å generere tilfeldighet i ruby inkluderer:
- Matrisen # shuffle-metoden
- Matrisen # sample-metoden
- SecureRandom-klassen
La oss gå over noen eksempler!
Generere Tilfeldige Tall
du kan generere Ruby tilfeldige tall ved hjelp av rand-metoden:
Rand produserer flyttall (0.4836732493
) hvis de kalles uten argumenter.
du kan sende et argument til rand
for å generere et tall fra null til (men ikke inkludert) det nummeret.
rand 100> 41
Ruby tilfeldig tallgenerering er veldig enkelt, men hva om du trenger nummeret til å være i et bestemt område i stedet for å starte fra null?
Ikke et problem!
du kan bruke et område for å få akkurat det du trenger.
Eksempel:
rand 200..500> 352
Secure Ruby Tilfeldige Tall
tallene produsert av rand kan være nok for et enkelt program…
…men hvis du vil bruke dem til sikkerhetsformål —som å generere et passord reset token— så bør du bruke SecureRandom, som er en del Av Ruby standard biblioteket.
SecureRandom frø sin generator fra/dev / urandom På Unix-systemer & på windows bruker Den CryptAcquireContext / CryptGenRandom API.
her er et eksempel:
require 'securerandom'SecureRandom.random_number> 0.232
som du kan se dette fungerer mye som rand
, kan du også passere i et maks antall.
Eksempel:
SecureRandom.random_number(100)> 72
SecureRandom har andre utdataformater tilgjengelig.
Ved hjelp av hex
kan generere en heksadesimal fast bredde streng.
SecureRandom.hex> "87694e9e5231abca6de39c58cdfbe307"
Ruby 2.5 introduserte en ny metode, som produserer tilfeldige alfanumeriske strenger:
SecureRandom.alphanumeric> "PSNVXOeDpnFikJPC"
Hvordan Velge Tilfeldige Elementer Fra Arrays
Nå:
du vil kanskje få et tilfeldig valg fra en liste.
du kan prøve dette:
.shuffle.first> 30
Men Ruby har prøvemetoden som er bedre egnet (og raskere) for denne oppgaven:
.sample> 5
du kan bruke prøve for områder, genererer denne koden en tilfeldig bokstav:
('a'..'z').to_a.sample> b
Du kan sende et heltallargument til prøve for Å få n unike elementer fra arrayet:
.sample(2)>
Det er også mulig å sende en tilpasset tilfeldig generator som et argument:
.sample(random: SecureRandom)
Ruby Random Strings
den ultimate tilfeldigheten programmet er å generere en tilfeldig streng med en tilpasset tegnsett. Her er koden:
def generate_code(number) charset = Array('A'..'Z') + Array('a'..'z') Array.new(number) { charset.sample }.joinendputs generate_code(20)
Det er noen ting som skjer her.
først forbereder vi vårt tegnsett ved hjelp av områder og konverterer dem til arrays. Da drar vi nytte av å ringe Array.new
med en blokk, som lar oss initialisere en rekke størrelse n med verdiene produsert av blokken.
denne koden vil produsere strenger av følgende form: TufwGfXZskHlPcYrLNKg
.
du kan justere tegnsettet for å passe dine behov.
Seeding Random Number Generator
Hvis du vil kontrollere hvilke tall som genereres når du bruker en metode som rand
, kan du sette frøet.
Hva er frøet?
frøet er et tall som starter en sekvens av tilfeldige tall.
alle genererte tall er avledet fra dette frøet.
derfor er kvaliteten på frøet vanligvis nøkkelen til å produsere en god sekvens av tilfeldige tall.
Ruby tar allerede vare på det for deg (bruk SecureRandom
hvis du trenger ekstra sikkerhet), men i noen scenarier (for det meste testing & feilsøking) vil du kanskje sette dette frøet selv.
Du kan gjøre dette med srand
– metoden.
Kernel.srand(1)
med dette frøet vet du nøyaktig hvilke tall generatoren skal gi deg.
for tallet 1 som frøet:
Array.new(5) { rand(1..10) }#
hvis du setter frøet igjen til 1, starter sekvensen på 6, deretter 9, 10, etc.
Konklusjon
Det er det! Du er nå klar til å begynne å bruke tilfeldighet i Dine Ruby-programmer 🙂
Syntes dette innlegget var nyttig?
Del det med vennene dine & abonner på nyhetsbrevet mitt slik at du ikke går glipp av noe nytt!