programing

루비에서 a와 b 사이에 난수를 생성하는 방법은?

oldcodes 2023. 6. 13. 22:47
반응형

루비에서 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)

커널#rand

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

반응형