[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)
(사용Random.new
에 의해 (다시) 자세히 설명 된 바와 같이, 좋은 생각되지 않을 것 일반적으로) 마크 – 앙드레 Lafortune 에, 그의 대답 (다시). -
그러나 사용하지 않는 경우
Random.new
, 다음 수업 방법rand
만 소요max
되지 값을,Range
로, 난간 (정력적) 주석에 지적 (과에서 설명하는대로 에 대한 문서Random
). 7 자리의 난수 를 생성하여 그림과 같이 인스턴스 메소드 만을 사용할 수 있습니다 .Range
의 상응하는 이유입니다 Random.new.rand(20..30)
것 20 + Random.rand(11)
때문에, Random.rand(int)
반환 “이 아닌 임의의 정수 크거나 제로에 동일 적은 인수보다 .” 20..30
30을 포함하면 11을 제외하고 0에서 11 사이의 임의의 숫자가 필요합니다.
답변
와 10 rand(42-10) + 10
사이의 임의의 숫자를 얻는 데 사용할 수 있지만 (10은 42와 독점은 42) 루비 1.9.3 이후에는 더 나은 방법으로 전화를 걸 수 있습니다.10
42
rand(10...42) # => 13
내 backports
gem 을 요구하여 모든 버전의 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
메소드에 전달 된 인수는 integer
a 또는 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)