루비에서 a와 b 사이에 난수를 생성하는 방법은?
예를 들어 3에서 10 사이의 난수를 생성하려면 다음을 사용합니다.rand(8) + 3
이것을 할 수 있는 더 좋은 방법이 있나요?rand(3, 10)
) ?
업데이트: Ruby 1.9.3Kernel#rand
범위도 허용합니다.
rand(a..b)
http://www.rubyinside.com/ruby-1-9-3-introduction-and-changes-5428.html
어레이로 변환하는 데는 비용이 너무 많이 들고 불필요합니다.
(a..b).to_a.sample
또는
[*a..b].sample
Ruby 1.8.7+ 표준.
참고: 1.8.7에서 #choice로 명명되었으며 이후 버전에서 이름이 변경되었습니다.
그러나 어쨌든 어레이를 생성하려면 리소스가 필요하며, 이미 작성한 솔루션이 최선입니다.
Random.new.rand(a..b)
어디에a
당신의 가장 낮은 값은b
가장 높은 값입니다.
범위 연산자를 사용할 수 있습니다.두 양식의 차이에 유의하십시오.
3..10 # includes 10
3...10 # doesn't include 10
rand(3..10)
max가 Range인 경우 랜드는 range.member?에서 난수를 반환합니다.(숫자) == 참입니다.
def random_int(min, max)
rand(max - min) + min
end
다음 답변을 참조하십시오. Ruby 1.9.2에는 있지만 이전 버전에는 없습니다.개인적으로 랜드(8) + 3은 괜찮다고 생각하지만, 관심이 있다면 링크에 설명된 랜덤 클래스를 확인하십시오.
10 및 10**24용
rand(10**24-10)+10
다음은 두 가지 모두에 대한 빠른 벤치마크입니다.#sample
그리고.#rand
:
irb(main):014:0* Benchmark.bm do |x|
irb(main):015:1* x.report('sample') { 1_000_000.times { (1..100).to_a.sample } }
irb(main):016:1> x.report('rand') { 1_000_000.times { rand(1..100) } }
irb(main):017:1> end
user system total real
sample 3.870000 0.020000 3.890000 ( 3.888147)
rand 0.150000 0.000000 0.150000 ( 0.153557)
그래서, 하기rand(a..b)
옳은 일인가요
언급URL : https://stackoverflow.com/questions/4395095/how-to-generate-a-random-number-between-a-and-b-in-ruby
'programing' 카테고리의 다른 글
Python pathlib은 존재하지 않는 디렉토리를 만듭니다. (0) | 2023.06.13 |
---|---|
R을 사용하여 그래프를 .eps 파일로 내보내기 (0) | 2023.06.13 |
"razor" 파일과 "cshtml" 파일의 차이점은 무엇입니까? (0) | 2023.06.13 |
각 성분의 유형 (0) | 2023.06.13 |
판다가 칼럼을 색인으로 사용할 수 있을까요? (0) | 2023.06.13 |