hvis du vil lære at generere tilfældige tal & strenge i Ruby, så er du på det rigtige sted.
fordi det er præcis, hvad denne artikel handler om!
med et tilfældigt tal kan du vælge et tilfældigt element fra et array, vælge en vinder fra en liste, generere terningruller osv.
i Ruby er der mange måder at generere tilfældige tal med forskellige egenskaber.
for eksempel …
Rand-metoden kan bruges på 3 måder:
- uden argumenter giver
rand
dig et flydende punktnummer mellem 0 & 1 (som 0.4836732493) - med et heltalsargument (
rand(10)
) får du et nyt heltal mellem 0 & dette tal - med et intervalargument (
rand(1..20)
) får du et heltal mellem start af området & slutningen af området
andre måder at generere tilfældighed i Ruby inkluderer:
- Array # shuffle method
- Array#sample method
- SecureRandom-klassen
lad os gå over nogle eksempler!
generering af tilfældige tal
du kan generere Ruby tilfældige tal ved hjælp af Rand-metoden:
Rand producerer flydende punktnumre (0.4836732493
), hvis de kaldes uden argumenter.
du kan sende et argument til rand
for at generere et tal, der starter fra nul op til (men ikke inklusive) dette tal.
rand 100> 41
Ruby random number generation er virkelig let, men hvad nu hvis du har brug for nummeret til at være i et bestemt interval i stedet for at starte fra nul?
ikke et problem!
du kan bruge en rækkevidde til at få præcis det, du har brug for.
eksempel:
rand 200..500> 352
Secure Ruby Random Numbers
numrene produceret af rand kan være nok til en simpel applikation…
…men hvis du vil bruge dem til sikkerhedsformål —som at generere et nulstillingstoken til adgangskode— skal du bruge SecureRandom, som er en del af Ruby standard library.
SecureRandom frø sin generator fra /dev/urandom på unikke systemer & på vinduer bruger den Kryptakøbekontekst / CryptGenRandom API.
her er et eksempel:
require 'securerandom'SecureRandom.random_number> 0.232
som du kan se fungerer dette meget som rand
, du kan også passere i et maks.
eksempel:
SecureRandom.random_number(100)> 72
SecureRandom har andre outputformater til rådighed.
brug af hex
kan generere en streng med fast bredde.
SecureRandom.hex> "87694e9e5231abca6de39c58cdfbe307"
Ruby 2.5 introducerede en ny metode, der producerer tilfældige alfanumeriske strenge:
SecureRandom.alphanumeric> "PSNVXOeDpnFikJPC"
Sådan vælges tilfældige elementer fra Arrays
nu:
du vil måske få et tilfældigt valg fra en liste.
du kan prøve dette:
.shuffle.first> 30
men Ruby har prøvemetoden, som er bedre egnet (og hurtigere) til denne opgave:
.sample> 5
du kan bruge prøve til intervaller, denne kode genererer et tilfældigt bogstav:
('a'..'z').to_a.sample> b
du kan bestå et heltalsargument for at prøve for at få N unikke elementer fra arrayet:
.sample(2)>
det er også muligt at passere en brugerdefineret tilfældig generator som et argument:
.sample(random: SecureRandom)
Ruby Random Strings
den ultimative tilfældighed ansøgning er at generere en tilfældig streng med en brugerdefineret tegnsæt. Her er koden:
def generate_code(number) charset = Array('A'..'Z') + Array('a'..'z') Array.new(number) { charset.sample }.joinendputs generate_code(20)
der er et par ting der foregår her.
først forbereder vi vores charset ved hjælp af intervaller og konverterer dem til arrays. Derefter drager vi fordel af at ringe Array.new
med en blok, som lader os initialisere en række størrelser n med de værdier, der produceres af blokken.
denne kode vil producere strenge af følgende form: TufwGfXZskHlPcYrLNKg
.
du kan justere tegnsættet, så det passer til dine behov.
Seeding the Random Number Generator
hvis du vil kontrollere, hvilke tal der genereres, når du bruger en metode som rand
, kan du indstille frøet.
hvad er frøet?
frøet er et tal, der starter en sekvens af tilfældige tal.
alle genererede tal stammer fra dette frø.
derfor er frøets kvalitet normalt nøglen til at producere en god sekvens af tilfældige tal.
Ruby tager sig allerede af det for dig (brug SecureRandom
hvis du har brug for ekstra sikkerhed), men i nogle scenarier (for det meste test & debugging) kan du selv indstille dette frø.
du kan gøre dette med srand
– metoden.
Kernel.srand(1)
med dette frø ved du nøjagtigt, hvilke numre generatoren vil give dig.
for nummer 1 som frø:
Array.new(5) { rand(1..10) }#
hvis du sætter frøet igen til 1, starter sekvensen ved 6, derefter 9, 10 osv.
konklusion
det er det! Du er nu klar til at begynde at bruge tilfældighed i dine Ruby-programmer Kristian
fandt dette indlæg nyttigt?
del det med dine venner & abonner på mit nyhedsbrev, så du ikke går glip af noget nyt!