2011-12-19 5 views
7

Các tài liệu cho Array#sample nói nó có thể mất một rng:Làm thế nào để sử dụng cú pháp mẫu # (n, ngẫu nhiên: rng)?

Nếu RNG được đưa ra, nó sẽ được sử dụng như các bộ tạo số ngẫu nhiên.

Làm thế nào một phạm vi có thể hoạt động như một trình tạo số ngẫu nhiên hoặc tại sao điều đó lại hữu ích?

Ngoài ra biểu mẫu băm cho thấy có các tùy chọn khác, nhưng tôi không thể tìm thấy bất kỳ điều gì về chúng. Đang thử [1,2,3,4,5].sample(3) hoạt động giống như [1,2,3,4,5].sample(3, random: 1..2).

+0

tôi đoán bạn có thể sử dụng bộ tạo số ngẫu nhiên có thể được sử dụng như một nguồn bổ sung cho số ngẫu nhiên (giống như một thiết bị phần cứng) có thể cung cấp một entropy tốt hơn so với RNG được tích hợp sẵn của Ruby. – Koraktor

+0

"Trình tạo số ngẫu nhiên (RNG) là một thiết bị tính toán hoặc vật lý được thiết kế để tạo chuỗi các số hoặc ký hiệu thiếu bất kỳ mẫu nào, tức là xuất hiện ngẫu nhiên". http://en.wikipedia.org/wiki/Random_number_generation –

+0

Tôi có cùng sự nhầm lẫn ... Tôi vẫn chưa hiểu, mục đích của đối số tùy chọn thứ hai với phương thức '# sample' là gì. Nếu bạn đang khỏe mạnh, bạn có thể cho tôi biết, trường hợp sử dụng của trường hợp này không? –

Trả lời

8

Đối số phải là trình tạo số ngẫu nhiên (RNG).

Nếu không được cung cấp, nó mặc định là triển khai Ruby "cổ phiếu".

Nó có thể được thay thế bằng một RNG tùy ý, như một mà không phải là ở tất cả ngẫu nhiên:

class NotAtAllRandom 
    def self.rand(x=0) 
    0 
    end 
end 

> (1..10000).sample(3, random: NotAtAllRandom) 
=> [1, 2, 3] 
> (1..10000).sample(3, random: NotAtAllRandom) 
=> [1, 2, 3] 
+0

rread misread cho phạm vi thay vì máy phát điện số ngẫu nhiên, đã thử nó ra, không có ý nghĩa. Bạn đã xóa nó, cảm ơn. – steenslag

+0

@steenslag Tôi đoán nó trông giống như phạm vi - duh; thậm chí không thấy điều đó. –

+0

"Tôi không hiểu rõ tại sao bạn nghĩ đó là phạm vi.": ''Range'.tr (' aeiou ',' ') ==' rng''. –