Computer >> Máy Tính >  >> Lập trình >> Ruby

Cách tạo số &chuỗi ngẫu nhiên trong Ruby

Nếu bạn muốn tìm hiểu cách tạo chuỗi &số ngẫu nhiên trong Ruby, thì bạn đã đến đúng chỗ.

Bởi vì đó chính xác là những gì bài viết này nói về!

Với một số ngẫu nhiên bạn có thể chọn một phần tử ngẫu nhiên từ một mảng, chọn người chiến thắng từ danh sách, tạo cuộn xúc xắc, v.v.

Trong Ruby, có nhiều cách để tạo các số ngẫu nhiên với các thuộc tính khác nhau.

Ví dụ…

Phương thức rand có thể được sử dụng theo 3 cách:

  • Không có đối số, rand cung cấp cho bạn một dấu phẩy động số từ 0 đến 1 (như 0,4836732493)
  • Với một số nguyên đối số (rand(10) ) bạn nhận được một số nguyên mới giữa 0 và số đó
  • Với phạm vi đối số (rand(1..20) ) bạn nhận được một số nguyên nằm giữa phần đầu của dải ô và phần cuối của dải ô

Các cách khác để tạo ngẫu nhiên trong Ruby bao gồm:

  • Mảng # xáo trộn phương pháp
  • Mẫu # mảng phương pháp
  • SecureRandom lớp học

Hãy xem qua một số ví dụ!

Tạo số ngẫu nhiên

Bạn có thể tạo các số ngẫu nhiên Ruby bằng cách sử dụng rand phương pháp:

Cách tạo số &chuỗi ngẫu nhiên trong Ruby

Rand tạo ra các số dấu phẩy động (0.4836732493 ) nếu được gọi mà không có bất kỳ đối số nào.

Bạn có thể chuyển một đối số vào rand để tạo một số bắt đầu từ 0 đến (nhưng không bao gồm ) số đó.

rand 100
> 41

Việc tạo số ngẫu nhiên trong Ruby thực sự rất dễ dàng, nhưng điều gì sẽ xảy ra nếu bạn cần số nằm trong một phạm vi cụ thể thay vì bắt đầu từ số 0?

Không thành vấn đề!

Bạn có thể sử dụng một phạm vi để nhận được chính xác những gì bạn cần.

Ví dụ :

rand 200..500
> 352

Số ngẫu nhiên Ruby an toàn

Những con số do rand tạo ra có thể đủ cho một ứng dụng đơn giản…

… Nhưng nếu bạn muốn sử dụng chúng cho mục đích bảo mật — như tạo mã thông báo đặt lại mật khẩu — thì bạn nên sử dụng SecureRandom , là một phần của thư viện chuẩn Ruby.

SecureRandom khởi tạo trình tạo của nó từ / dev / urandom trên hệ thống Unix và trên windows, nó sử dụng API CryptAcquireContext / CryptGenRandom.

Đây là một ví dụ :

require 'securerandom'

SecureRandom.random_number
> 0.232

Như bạn có thể thấy, điều này hoạt động rất giống với rand , bạn cũng có thể chuyển một số tối đa.

Ví dụ :

SecureRandom.random_number(100)
> 72

SecureRandom có sẵn các định dạng đầu ra khác.

Sử dụng hex có thể tạo một chuỗi có độ rộng cố định theo hệ thập lục phân.

SecureRandom.hex
> "87694e9e5231abca6de39c58cdfbe307"

Ruby 2.5 đã giới thiệu một phương pháp mới, tạo ra các chuỗi chữ và số ngẫu nhiên:

SecureRandom.alphanumeric
> "PSNVXOeDpnFikJPC"

Cách chọn các phần tử ngẫu nhiên từ mảng

Bây giờ:

Bạn có thể muốn nhận một lựa chọn ngẫu nhiên từ một danh sách .

Bạn có thể thử cách này:

[5, 15, 30, 60].shuffle.first
> 30

Nhưng Ruby có mẫu phương pháp phù hợp hơn (và nhanh hơn) cho tác vụ này:

[5, 15, 30, 60].sample
> 5

Bạn có thể sử dụng mẫu đối với các phạm vi, mã này tạo ra một ký tự ngẫu nhiên:

('a'..'z').to_a.sample
> b

Bạn có thể chuyển một đối số số nguyên vào mẫu để nhận N phần tử duy nhất từ mảng:

[1,2,3].sample(2)
> [1, 2]

Cũng có thể chuyển một trình tạo ngẫu nhiên tùy chỉnh làm đối số:

[1,2,3].sample(random: SecureRandom)

Chuỗi ngẫu nhiên của Ruby

Ứng dụng ngẫu nhiên cuối cùng là tạo một chuỗi ngẫu nhiên với một bộ ký tự tùy chỉnh. Đây là mã:

def generate_code(number)
  charset = Array('A'..'Z') + Array('a'..'z')
  Array.new(number) { charset.sample }.join
end

puts generate_code(20)

Có một số điều đang diễn ra ở đây.

Đầu tiên, chúng tôi chuẩn bị bộ ký tự của mình bằng cách sử dụng các dải ô và chuyển đổi chúng thành mảng. Sau đó, chúng tôi tận dụng lợi thế của việc gọi Array.new với một khối, cho phép chúng tôi khởi tạo một mảng có kích thước n với các giá trị do khối tạo ra.

Mã này sẽ tạo ra các chuỗi có dạng sau:TufwGfXZskHlPcYrLNKg .

Bạn có thể điều chỉnh bộ ký tự để phù hợp với nhu cầu của mình.

Gieo hạt trình tạo số ngẫu nhiên

Nếu bạn muốn kiểm soát những số nào được tạo khi sử dụng một phương pháp như rand thì bạn có thể đặt hạt giống.

Hạt giống là gì?

Hạt giống là một số bắt đầu một chuỗi các số ngẫu nhiên.

Tất cả các số được tạo đều có nguồn gốc từ hạt giống này .

Đó là lý do tại sao chất lượng của hạt giống thường là chìa khóa để tạo ra một chuỗi số ngẫu nhiên tốt.

Ruby đã lo điều đó cho bạn (sử dụng SecureRandom nếu bạn cần thêm bảo mật), nhưng trong một số trường hợp (chủ yếu là thử nghiệm và gỡ lỗi), bạn có thể muốn tự thiết lập hạt giống này.

Bạn có thể làm điều này với srand phương pháp.

Như thế này :

Kernel.srand(1)

Với hạt giống này, bạn sẽ biết chính xác những con số mà trình tạo sẽ cung cấp cho bạn.

Đối với số 1 là hạt giống :

Array.new(5) { rand(1..10) }
# [6, 9, 10, 6, 1]

Nếu bạn đặt lại hạt giống thành 1, trình tự sẽ bắt đầu từ 6, rồi 9, 10, v.v.

Kết luận

Đó là nó! Bây giờ bạn đã sẵn sàng để bắt đầu sử dụng tính ngẫu nhiên trong các chương trình Ruby của mình 🙂

Thấy bài đăng này hữu ích?

Chia sẻ nó với bạn bè của bạn & đăng ký nhận bản tin của tôi để bạn không bỏ lỡ bất kỳ điều gì mới!