Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Làm Chủ Số Ngẫu Nhiên & Chuỗi Trong Ruby: Hướng Dẫn Thực Tế

Muốn sinh số ngẫu nhiên và chuỗi ngẫu nhiên trong Ruby? Bạn đã đến đúng nơi!

Số ngẫu nhiên giúp: chọn phần tử ngẫu nhiên từ mảng, chọn người thắng cuộc, tung xúc xắc, v.v.

Ruby có nhiều cách sinh số ngẫu nhiên với các thuộc tính khác nhau.

Phương Thức rand

rand dùng 3 cách:

  • Không tham số: số thực 0 đến 1 (vd: 0.4836732493)
  • Tham số integer rand(10): integer 0 đến 9
  • Tham số range rand(1..20): integer trong khoảng

Các cách khác:

  • Array#shuffle
  • Array#sample
  • Class SecureRandom

Sinh Số Ngẫu Nhiên

Làm Chủ Số Ngẫu Nhiên & Chuỗi Trong Ruby: Hướng Dẫn Thực Tế

rand không đối số → float 0-1.

Đối số integer: rand 100 # > 41

Cần khoảng cụ thể? Dùng range: rand 200..500 # > 352

Số Ngẫu Nhiên An Toàn (SecureRandom)

rand đủ cho app đơn giản, nhưng cho mục đích bảo mật (token reset password) hãy dùng SecureRandom (thư viện chuẩn).

Nguồn entropy: /dev/urandom (Unix) hoặc CryptAcquireContext/CryptGenRandom (Windows).

require 'securerandom'
SecureRandom.random_number        # > 0.232
SecureRandom.random_number(100)   # > 72

Định dạng khác:

  • SecureRandom.hex → chuỗi hex fixed-width: "87694e9e5231abca6de39c58cdfbe307"
  • Ruby 2.5+: SecureRandom.alphanumeric → chuỗi alphanumeric: "PSNVXOeDpnFikJPC"

Chọn Phần Tử Ngẫu Nhiên Từ Mảng

Cách cơ bản: [5, 15, 30, 60].shuffle.first # > 30

Tốt hơn: sample (nhanh hơn, phù hợp hơn):

[5, 15, 30, 60].sample           # > 5
('a'..'z').to_a.sample             # > b (chữ cái ngẫu nhiên)
[1,2,3].sample(2)                  # > [1, 2] (2 phần tử duy nhất)
[1,2,3].sample(random: SecureRandom) # custom generator

Chuỗi Ngẫu Nhiên (Random Strings)

Sinh chuỗi ngẫu nhiên với charset tùy chỉnh:

def generate_code(number)
  charset = Array('A'..'Z') + Array('a'..'z')
  Array.new(number) { charset.sample }.join
end
puts generate_code(20)  # Vd: TufwGfXZskHlPcYrLNKg

Giải thích: tạo charset từ range, Array.new(number) { block } khởi tạo mảng size n với giá trị từ block.

Tùy chỉnh charset theo nhu cầu.

Seeding (Gieo Hạt) Bộ Sinh Số Ngẫu Nhiên

Muốn kiểm soát dãy số? Set seed bằng srand.

Seed là gì? Số khởi tạo dãy số ngẫu nhiên. Tất cả số sinh ra đều dẫn xuất từ seed. Chất lượng seed quyết định chất lượng dãy số.

Ruby tự xử lý (dùng SecureRandom cho bảo mật), nhưng cho test/debug có thể tự set:

Kernel.srand(1)

Với seed = 1:

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

Set lại seed = 1 → dãy lặp lại y hệt.

Kết Luận

Bạn đã sẵn sàng dùng ngẫu nhiên trong Ruby! 🙂

Bài viết hữu ích? Chia sẻ cho bạn bè & đăng ký newsletter để không bỏ lỡ!