jeśli chcesz dowiedzieć się, jak generować losowe liczby & ciągi znaków w Rubim, to jesteś we właściwym miejscu.
bo dokładnie o tym jest ten artykuł!
za pomocą losowej liczby możesz wybrać losowy element z tablicy, wybrać zwycięzcę z listy, wygenerować rzuty kostkami itp.
w Rubim istnieje wiele sposobów generowania losowych liczb o różnych właściwościach.
na przykład…
metoda rand może być użyta na 3 sposoby:
- bez argumentów,
rand
daje liczbę zmiennoprzecinkową z zakresu 0 & 1 (Jak 0.4836732493) - z argumentem integer (
rand(10)
) otrzymasz nową liczbę całkowitą z zakresu 0 & ta liczba - z argumentem range (
rand(1..20)
) otrzymasz liczba całkowita pomiędzy początkiem zakresu & końcem zakresu
inne sposoby generowania losowości w Rubim obejmują:
- metoda array # shuffle
- metoda Array#sample
- Klasa SecureRandom
przejdźmy do kilku przykładów!
Generowanie liczb losowych
możesz generować liczby losowe Ruby za pomocą metody rand:
Rand generuje liczby zmiennoprzecinkowe (0.4836732493
), jeśli jest wywoływany bez żadnych argumentów.
możesz przekazać argument do rand
, aby wygenerować liczbę od zera do (ale nie wliczając) tej liczby.
rand 100> 41
generowanie liczb losowych w Ruby jest naprawdę łatwe, ale co, jeśli chcesz, aby Liczba znajdowała się w określonym zakresie, zamiast zaczynać od zera?
nie ma problemu!
możesz użyć zakresu, aby uzyskać dokładnie to, czego potrzebujesz.
przykład:
rand 200..500> 352
bezpieczne liczby losowe Ruby
liczby wytworzone przez rand mogą wystarczyć do prostej aplikacji…
…ale jeśli chcesz użyć ich do celów bezpieczeństwa —takich jak generowanie tokena resetowania hasła— powinieneś użyć SecureRandom, który jest częścią standardowej biblioteki Ruby.
SecureRandom wysyła swój generator z /dev/urandom w systemach Unix & w windows używa API CRYPTACQUIRECONTEXT / CRYPTGENRANDOM.
oto przykład:
require 'securerandom'SecureRandom.random_number> 0.232
jak widać działa to podobnie do rand
, możesz również przekazać maksymalną liczbę.
przykład:
SecureRandom.random_number(100)> 72
SecureRandom ma inne dostępne formaty wyjściowe.
używając hex
można wygenerować łańcuch szesnastkowy o stałej szerokości.
SecureRandom.hex> "87694e9e5231abca6de39c58cdfbe307"
Ruby 2.5 wprowadził nową metodę, która tworzy losowe ciągi alfanumeryczne:
SecureRandom.alphanumeric> "PSNVXOeDpnFikJPC"
jak wybrać losowe elementy z tablic
teraz:
możesz chcieć uzyskać losowy wybór z listy.
możesz spróbować tego:
.shuffle.first> 30
ale Ruby ma przykładową metodę, która lepiej (i szybciej) nadaje się do tego zadania:
.sample> 5
możesz użyć próbki dla zakresów, kod ten generuje losową literę:
('a'..'z').to_a.sample> b
możesz przekazać argument integer do sample, aby uzyskać N unikalnych elementów z tablicy:
.sample(2)>
możliwe jest również przekazanie niestandardowego generatora losowego jako argumentu:
.sample(random: SecureRandom)
Ruby Random Strings
ostatecznym zastosowaniem randomness jest wygenerowanie losowego ciągu z niestandardowym zestawem znaków. Oto kod:
def generate_code(number) charset = Array('A'..'Z') + Array('a'..'z') Array.new(number) { charset.sample }.joinendputs generate_code(20)
najpierw przygotowujemy nasz charset używając zakresów i konwertujemy je na tablice. Następnie korzystamy z wywołania Array.new
z blokiem, co pozwala nam zainicjalizować tablicę o rozmiarze n wartościami wytworzonymi przez blok.
ten kod wytworzy ciągi znaków o następującej postaci: TufwGfXZskHlPcYrLNKg
.
możesz dostosować zestaw znaków do swoich potrzeb.
zasiewanie generatora liczb losowych
jeśli chcesz kontrolować, jakie liczby są generowane przy użyciu metody takiej jak rand
, możesz ustawić ziarno.
co to za zalążek?
zalążek jest liczbą rozpoczynającą ciąg liczb losowych.
Wszystkie wygenerowane liczby pochodzą z tego ziarna.
dlatego jakość ziarna jest zwykle kluczem do wytworzenia dobrej sekwencji liczb losowych.
Ruby już dba o to za ciebie (użyj SecureRandom
jeśli potrzebujesz dodatkowego bezpieczeństwa), ale w niektórych scenariuszach (głównie testowanie & debugowanie) możesz chcieć ustawić ten seed samodzielnie.
możesz to zrobić za pomocą metody srand
.
Kernel.srand(1)
z tym ziarnem będziesz dokładnie wiedział, jakie liczby da ci generator.
dla liczby 1 jako zalążek:
Array.new(5) { rand(1..10) }#
Jeśli ponownie ustawisz ziarno na 1, Sekwencja rozpocznie się od 6, Następnie 9, 10 itd.
podsumowanie
to jest to! Jesteś teraz gotowy, aby zacząć używać losowości w swoich programach Ruby 🙂
czy ten post był przydatny?
podziel się nim ze znajomymi & zapisz się do mojego newslettera, aby nie przegapić niczego nowego!