om du vill lära dig att generera slumptal & strängar i Ruby, då är du på rätt plats.
för det är precis vad den här artikeln handlar om!
med ett slumptal kan du välja ett slumpmässigt element från en array, välja en vinnare från en lista, generera tärningsrullar etc.
i Ruby finns det många sätt att generera slumptal med olika egenskaper.
till exempel…
rand-metoden kan användas på 3 sätt:
- utan argument,
rand
ger dig ett flytpunktsnummer mellan 0 & 1 (som 0.4836732493) - med ett heltalsargument (
rand(10)
) får du ett nytt heltal mellan 0 & det numret - med ett intervallargument (
rand(1..20)
) får du ett heltal mellan 0
andra sätt att generera slumpmässighet i Ruby inkluderar:
- Array # shuffle-metoden
- Array # sample method
- SecureRandom-klassen
Låt oss gå igenom några exempel!
generera slumptal
du kan generera Ruby slumptal med rand-metoden:
Rand producerar flyttal (0.4836732493
) om anropas utan några argument.
du kan skicka ett argument till rand
för att generera ett tal som börjar från noll till (men inte inklusive) det numret.
rand 100> 41
Ruby slumptalsgenerering är verkligen lätt, men vad händer om du behöver numret för att vara i ett visst intervall istället för att börja från noll?
inte ett problem!
du kan använda ett intervall för att få exakt vad du behöver.
exempel:
rand 200..500> 352
Secure Ruby Random Numbers
numren som produceras av rand kan räcka för en enkel applikation…
…men om du vill använda dem för säkerhetsändamål —som att generera en lösenordsåterställningstoken— bör du använda SecureRandom, som ingår i Ruby standard library.
SecureRandom fröer sin generator från/dev / urandom på Unix-system & på windows använder den CryptAcquireContext / CryptGenRandom API.
här är ett exempel:
require 'securerandom'SecureRandom.random_number> 0.232
som du kan se fungerar det mycket som rand
, du kan också skicka in ett maxnummer.
exempel:
SecureRandom.random_number(100)> 72
SecureRandom har andra utdataformat tillgängliga.
använda hex
kan generera en hexadecimal sträng med fast bredd.
SecureRandom.hex> "87694e9e5231abca6de39c58cdfbe307"
Ruby 2.5 introducerade en ny metod som producerar slumpmässiga alfanumeriska strängar:
SecureRandom.alphanumeric> "PSNVXOeDpnFikJPC"
hur man väljer slumpmässiga element från arrayer
nu:
du kanske vill få ett slumpmässigt val från en lista.
du kan prova detta:
.shuffle.first> 30
men Ruby har provmetoden som passar bättre (och snabbare) för denna uppgift:
.sample> 5
du kan använda prov för intervall, den här koden genererar en slumpmässig bokstav:
('a'..'z').to_a.sample> b
du kan skicka ett heltal argument till prov för att få N unika element från matrisen:
.sample(2)>
det är också möjligt att skicka en anpassad slumpgenerator som ett argument:
.sample(random: SecureRandom)
Ruby Random strängar
den ultimata slumpmässighet ansökan är att generera en slumpmässig sträng med en anpassad teckenuppsättning. Här är koden:
def generate_code(number) charset = Array('A'..'Z') + Array('a'..'z') Array.new(number) { charset.sample }.joinendputs generate_code(20)
det finns några saker som händer här.
först förbereder vi vår charset med hjälp av intervall och konverterar dem till arrayer. Sedan utnyttjar vi att ringa Array.new
med ett block, vilket gör att vi kan initiera en matris av storlek n med de värden som produceras av blocket.
denna kod kommer att producera strängar av följande form: TufwGfXZskHlPcYrLNKg
.
du kan justera teckenuppsättningen för att passa dina behov.
sådd slumptalsgeneratorn
om du vill kontrollera vilka nummer som genereras när du använder en metod som rand
kan du ställa in fröet.
vad är fröet?
fröet är ett tal som startar en sekvens av slumptal.
alla genererade tal härrör från detta frö.
därför är fröets kvalitet vanligtvis nyckeln till att producera en bra sekvens av slumptal.
Ruby tar redan hand om det för dig (använd SecureRandom
om du behöver extra säkerhet), men i vissa scenarier (mestadels testning & felsökning) kanske du vill ställa in detta frö själv.
du kan göra detta med metoden srand
.
Kernel.srand(1)
med detta frö vet du exakt vilka nummer generatorn kommer att ge dig.
för nummer 1 som frö:
Array.new(5) { rand(1..10) }#
om du ställer in fröet igen till 1 börjar sekvensen vid 6, sedan 9, 10, etc.
slutsats
det är det! Du är nu redo att börja använda slumpmässighet i dina Ruby-program saucic
hittade du det här inlägget användbart?
dela det med dina vänner & prenumerera på mitt nyhetsbrev så att du inte missar något nytt!