[ruby-on-rails] 루비에서 난수를 얻는 방법

0와 사이에 난수를 어떻게 생성 n합니까?



답변

사용하다 rand(range)

에서 루비 임의의 번호 :

6면 주사위의 롤을 시뮬레이션하기 위해 임의의 정수가 필요한 경우 다음을 사용하십시오 1 + rand(6). 크랩 롤은로 시뮬레이션 할 수 있습니다 2 + rand(6) + rand(6).

마지막으로 임의의 부동 소수점이 필요한 경우 rand인수없이 호출 하면됩니다.


으로 마크 – 앙드레 Lafortune는 에 언급 (그것을 upvote에 가서) 아래에 그의 대답 , 루비 1.9.2 자체가 Random클래스 (마크 – 앙드레 자신이 있다는 디버그에 도움 , 따라서 1.9.2 대상 해당 기능을).

예를 들어, 10 개의 숫자를 추측해야하는게임에서 다음을 사용하여 숫자 를 초기화 할 수 있습니다.

10.times.map{ 20 + Random.rand(11) }
#=> [26, 26, 22, 20, 30, 26, 23, 23, 25, 22]

노트 :

의 상응하는 이유입니다 Random.new.rand(20..30)20 + Random.rand(11)때문에, Random.rand(int)반환 “이 아닌 임의의 정수 크거나 제로에 동일 적은 인수보다 .” 20..3030을 포함하면 11을 제외하고 0에서 11 사이의 임의의 숫자가 필요합니다.


답변

와 10 rand(42-10) + 10사이의 임의의 숫자를 얻는 데 사용할 수 있지만 (10은 42와 독점은 42) 루비 1.9.3 이후에는 더 나은 방법으로 전화를 걸 수 있습니다.1042

rand(10...42) # => 13

backportsgem 을 요구하여 모든 버전의 Ruby에서 사용할 수 있습니다.

Ruby 1.9.2는 Random클래스를 도입 하여 자신 만의 난수 생성기 객체를 생성하고 멋진 API를 제공합니다.

r = Random.new
r.rand(10...42) # => 22
r.bytes(3) # => "rnd"

Random직접 호출 할 수 있도록 클래스 자체는, 임의의 발전기 역할을합니다 :

Random.rand(10...42) # => same as rand(10...42)

에 대한 참고 사항 Random.new

대부분의 경우 가장 간단한 방법은 rand또는 을 사용하는 것 Random.rand입니다. 난수를 원할 때마다 새로운 난수 생성기를 생성하는 것은 정말 나쁜 생각 입니다. 이 작업을 수행하면 임의 생성기 자체 의 속성과 비교할 수있는 초기 시딩 알고리즘의 임의 속성을 얻게 됩니다 .

Random.new따라서 사용하는 경우 가급적 드물게 ( 예 : 한 번만 호출) MyApp::Random = Random.new다른 곳에서 사용해야합니다.

사례 Random.new유용는 다음과 같다 :

  • 당신은 보석을 쓰고 있고 주 프로그램이 의존하고있는 rand/ 시퀀스를 방해하고 싶지 않습니다 Random.rand.
  • 당신은 임의의 재현 가능한 난수 시퀀스를 원합니다 (예 : 스레드 당 하나)
  • 재현 가능한 난수 시퀀스를 저장하고 재개 할 수 있기를 원합니다 ( Random객체가 마샬링 될 수 있으므로 쉬움 )

답변

숫자뿐만 아니라 16 진수 또는 uuid를 찾고 있다면 SecureRandom모듈 ActiveSupport이 1.9.2 이상에서 루비 코어로 길을 찾았다는 것을 언급 할 가치가 있습니다. 따라서 완전한 프레임 워크가 필요하지 않습니다.

require 'securerandom'

p SecureRandom.random_number(100) #=> 15
p SecureRandom.random_number(100) #=> 88

p SecureRandom.random_number #=> 0.596506046187744
p SecureRandom.random_number #=> 0.350621695741409

p SecureRandom.hex #=> "eb693ec8252cd630102fd0d0fb7c3485"

여기에 문서화되어 있습니다 : Ruby 1.9.3-모듈 : SecureRandom (lib / securerandom.rb)


답변

rand방법 으로 난수를 생성 할 수 있습니다 . rand메소드에 전달 된 인수는 integera 또는 a 이어야하며 range범위 내의 해당 난수를 리턴합니다.

rand(9)       # this generates a number between 0 to 8
rand(0 .. 9)  # this generates a number between 0 to 9
rand(1 .. 50) # this generates a number between 1 to 50
#rand(m .. n) # m is the start of the number range, n is the end of number range


답변

글쎄, 나는 알아 냈다. rand라는 내장 (?) 함수가 있습니다.

rand(n + 1)

누군가가 더 자세한 답변으로 대답하면 정답으로 표시합니다.


답변

이건 어때?

n = 3
(0..n).to_a.sample


답변

질문에 대한 가장 간단한 답변 :

rand(0..n)