Tôi đã sử dụng điều này một thời gian để trả về một trong hai true
hoặc false
khi 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 true
khô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 true
hoặc false
khi 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 true
khô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].sample
nhanh hơn rand(2) == 1
. Khi tôi thực hiện mỗi thao tác 10 triệu lần , rand
phương pháp này là 2,179 giây. Các sample
phươ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].sample
hơn vì nó rõ ràng ngay lập tức những gì nó làm. rand(2) == 1
Tuy nhiên, sẽ hoạt động với ruby <1,9, điều này tốt.
0
và 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.5
nhưng rand < 0.5
đúng hơn về mặt kỹ thuật. rand
trả 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.7
vớ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?