dacă doriți să învățați cum să generați numere aleatorii & șiruri în Ruby, atunci sunteți în locul potrivit.
pentru că exact despre asta este vorba în acest articol!
cu un număr aleatoriu Puteți alege un element aleatoriu dintr-o matrice, alege un câștigător dintr-o listă, genera role de zaruri, etc.
în Ruby, există multe modalități de a genera numere aleatorii cu diferite proprietăți.
de exemplu…
metoda rand poate fi utilizată în 3 moduri:
- fără argumente,
rand
vă oferă un număr în virgulă mobilă între 0 & 1 (Cum ar fi 0.4836732493) - cu un argument întreg (
rand(10)
) veți obține un nou număr întreg între 0 & acel număr - cu un argument interval (
rand(1..20)
) veți obține un număr întreg între începutul intervalului & sfârșitul intervalului
alte modalități de a genera aleatoriu în Ruby includ:
- metoda Array # shuffle
- metoda array#sample
- clasa SecureRandom
să trecem peste câteva exemple!
generarea de numere aleatoare
puteți genera numere aleatoare Ruby folosind metoda rand:
Rand produce numere în virgulă mobilă (0.4836732493
) dacă este apelat fără argumente.
puteți trece un argument la rand
pentru a genera un număr începând de la zero până la (dar fără a include) acel număr.
rand 100> 41
generarea de numere aleatoare Ruby este foarte ușoară, dar dacă aveți nevoie ca numărul să fie într-un anumit interval în loc să începeți de la zero?
nu este o problemă!
puteți utiliza o gamă pentru a obține exact ceea ce aveți nevoie.
exemplu:
rand 200..500> 352
Secure Ruby Random Numbers
numerele produse de rand ar putea fi suficiente pentru o aplicație simplă…
…dar dacă doriți să le utilizați în scopuri de securitate —cum ar fi generarea unui jeton de resetare a parolei— atunci ar trebui să utilizați SecureRandom, care face parte din biblioteca standard Ruby.
SecureRandom semințe generatorul său de la /dev/urandom pe sistemele Unix & pe windows utilizează API CryptAcquireContext / CryptGenRandom.
Iată un exemplu:
require 'securerandom'SecureRandom.random_number> 0.232
după cum puteți vedea acest lucru funcționează foarte mult ca rand
, puteți trece, de asemenea, într-un număr maxim.
exemplu:
SecureRandom.random_number(100)> 72
SecureRandom are alte formate de ieșire disponibile.
utilizarea hex
poate genera un șir hexazecimal cu lățime fixă.
SecureRandom.hex> "87694e9e5231abca6de39c58cdfbe307"
Ruby 2.5 a introdus o nouă metodă, care produce șiruri alfanumerice aleatorii:
SecureRandom.alphanumeric> "PSNVXOeDpnFikJPC"
cum să alegeți elemente aleatorii din matrice
acum:
poate doriți să obțineți o alegere aleatorie dintr-o listă.
puteți încerca acest lucru:
.shuffle.first> 30
dar Ruby are metoda de probă care este mai potrivită (și mai rapidă) pentru această sarcină:
.sample> 5
puteți utiliza eșantion pentru intervale, acest cod generează o literă aleatorie:
('a'..'z').to_a.sample> b
puteți trece un argument întreg la eșantion pentru a obține n elemente unice din matrice:
.sample(2)>
de asemenea, este posibil să treci un generator aleatoriu personalizat ca argument:
.sample(random: SecureRandom)
Ruby Random Strings
aplicația Ultimate randomness este de a genera un șir aleatoriu cu un set de caractere personalizat. Iată codul:
def generate_code(number) charset = Array('A'..'Z') + Array('a'..'z') Array.new(number) { charset.sample }.joinendputs generate_code(20)
se întâmplă câteva lucruri aici.
în primul rând, ne pregătim setul de caractere folosind intervale și convertindu-le în matrice. Apoi profităm de apelarea Array.new
cu un bloc, care ne permite să inițializăm o matrice de dimensiune n cu valorile produse de bloc.
acest cod va produce șiruri de următoarea formă: TufwGfXZskHlPcYrLNKg
.
puteți modifica setul de caractere pentru a se potrivi nevoilor dvs.
însămânțarea generatorului de numere aleatorii
dacă doriți să controlați ce numere sunt generate atunci când utilizați o metodă precum rand
, puteți seta semințele.
ce este sămânța?
sămânța este un număr care începe o secvență de numere aleatoare.
toate numerele generate sunt derivate din această sămânță.
de aceea, calitatea semințelor este de obicei cheia pentru producerea unei secvențe bune de numere aleatorii.
Ruby are deja grijă de asta pentru dvs. (utilizați SecureRandom
dacă aveți nevoie de securitate suplimentară), dar în unele scenarii (mai ales testarea depanării &) poate doriți să setați singur această sămânță.
puteți face acest lucru cu metoda srand
.
Kernel.srand(1)
cu această sămânță veți ști exact ce numere vă va oferi generatorul.
pentru numărul 1 ca sămânță:
Array.new(5) { rand(1..10) }#
dacă setați din nou sămânța la 1, secvența va începe la 6, apoi la 9, 10 etc.
concluzie
asta e! Acum sunteți gata să începeți să utilizați aleatoriu în programele dvs. Ruby
ați găsit acest post util?
impartaseste-l cu prietenii tăi & Aboneaza-te la newsletter-ul meu, astfel încât să nu pierdeți nimic nou!