Tôi đã sử dụng điều này một thời gian để trả về một trong hai truehoặc falsekhi xây dựng dữ liệu hạt giống giả. Chỉ tự hỏi liệu có ai có cách trả về tốt hơn, ngắn gọn hơn hoặc dài dòng hơn truekhông false.
rand(2) == 1 ? true : false
Tôi đã sử dụng điều này một thời gian để trả về một trong hai truehoặc falsekhi xây dựng dữ liệu hạt giống giả. Chỉ tự hỏi liệu có ai có cách trả về tốt hơn, ngắn gọn hơn hoặc dài dòng hơn truekhông false.
rand(2) == 1 ? true : false
Câu trả lời:
Đoạn mã khai báo sử dụng Array # sample :
random_boolean = [true, false].sample
[true, false].samplenhanh hơn rand(2) == 1. Khi tôi thực hiện mỗi thao tác 10 triệu lần , randphương pháp này là 2,179 giây. Các samplephương pháp là 1.645s.
Làm thế nào về việc loại bỏ toán tử bậc ba.
rand(2) == 1
[true, false].samplehơn vì nó rõ ràng ngay lập tức những gì nó làm. rand(2) == 1Tuy nhiên, sẽ hoạt động với ruby <1,9, điều này tốt.
0và 1, bạn cũng có thể sử dụngrand(2).zero?
Tôi thích sử dụng rand:
rand < 0.5
Chỉnh sửa : Câu trả lời này đã từng đọc rand > 0.5nhưng rand < 0.5đúng hơn về mặt kỹ thuật. randtrả về kết quả trong phạm vi nửa mở [0,1), do đó, việc sử dụng <dẫn đến tỷ lệ cược bằng nhau của phạm vi nửa mở [0,0,5) và [0,5,1). Việc sử dụng >sẽ dẫn đến tỷ lệ cược BẤT NGỜ của phạm vi đóng [0,0,5] và phạm vi mở (0,5,1).
rand > 0.3
rand < 0.7với 70%
Tôi thường sử dụng một cái gì đó như thế này:
rand(2) > 0
Bạn cũng có thể mở rộng Integer để tạo phương thức to_boolean:
class Integer
def to_boolean
!self.zero?
end
end
rand(2).zero?
rand(2)==1đã là một giá trị boolean không?