Jak generować losowe liczby i ciągi znaków w Rubim

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:

ruby random

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!

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

Previous post jak zdobyć przepustkę na lotnisku [przez ochronę]
Next post Jay Leno kupuje seafair condos