루비에서 난수를 얻는 방법
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은 포함, 42는 제외) rand(42-10) + 10
사이의 난수를 얻는 데 사용할 수 있지만 Ruby 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
유용는 다음과 같다 :
- 당신은 gem을 작성하고 있고 주요 프로그램이 의존 할 수있는
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 여야하며 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)
If someone answers with a more detailed answer, I'll mark that as the correct answer.
What about this?
n = 3
(0..n).to_a.sample
Simplest answer to the question:
rand(0..n)
You can simply use random_number
.
If a positive integer is given as n, random_number
returns an integer: 0 <= random_number
< n.
Use it like this:
any_number = SecureRandom.random_number(100)
The output will be any number between 0 and 100.
rand(6) #=> gives a random number between 0 and 6 inclusively
rand(1..6) #=> gives a random number between 1 and 6 inclusively
Note that the range option is only available in newer(1.9+ I believe) versions of ruby.
range = 10..50
rand(range)
or
range.to_a.sample
or
range.to_a.shuffle(this will shuffle whole array and you can pick a random number by first or last or any from this array to pick random one)
This link is going to be helpful regarding this;
http://ruby-doc.org/core-1.9.3/Random.html
And some more clarity below over the random numbers in ruby;
Generate an integer from 0 to 10
puts (rand() * 10).to_i
Generate a number from 0 to 10 In a more readable way
puts rand(10)
Generate a number from 10 to 15 Including 15
puts rand(10..15)
Non-Random Random Numbers
Generate the same sequence of numbers every time the program is run
srand(5)
Generate 10 random numbers
puts (0..10).map{rand(0..10)}
you can do rand(range)
x = rand(1..5)
Easy way to get random number in ruby is,
def random
(1..10).to_a.sample.to_s
end
Try array#shuffle
method for randomization
array = (1..10).to_a
array.shuffle.first
Maybe it help you. I use this in my app
https://github.com/rubyworks/facets
class String
# Create a random String of given length, using given character set
#
# Character set is an Array which can contain Ranges, Arrays, Characters
#
# Examples
#
# String.random
# => "D9DxFIaqR3dr8Ct1AfmFxHxqGsmA4Oz3"
#
# String.random(10)
# => "t8BIna341S"
#
# String.random(10, ['a'..'z'])
# => "nstpvixfri"
#
# String.random(10, ['0'..'9'] )
# => "0982541042"
#
# String.random(10, ['0'..'9','A'..'F'] )
# => "3EBF48AD3D"
#
# BASE64_CHAR_SET = ["A".."Z", "a".."z", "0".."9", '_', '-']
# String.random(10, BASE64_CHAR_SET)
# => "xM_1t3qcNn"
#
# SPECIAL_CHARS = ["!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "=", "+", "|", "/", "?", ".", ",", ";", ":", "~", "`", "[", "]", "{", "}", "<", ">"]
# BASE91_CHAR_SET = ["A".."Z", "a".."z", "0".."9", SPECIAL_CHARS]
# String.random(10, BASE91_CHAR_SET)
# => "S(Z]z,J{v;"
#
# CREDIT: Tilo Sloboda
#
# SEE: https://gist.github.com/tilo/3ee8d94871d30416feba
#
# TODO: Move to random.rb in standard library?
def self.random(len=32, character_set = ["A".."Z", "a".."z", "0".."9"])
chars = character_set.map{|x| x.is_a?(Range) ? x.to_a : x }.flatten
Array.new(len){ chars.sample }.join
end
end
It works fine for me
How about this one?
num = Random.new
num.rand(1..n)
Don't forget to seed the RNG with srand() first.
use 'rand' function Just Like this
rand(10)
참고URL : https://stackoverflow.com/questions/198460/how-to-get-a-random-number-in-ruby
'programing' 카테고리의 다른 글
T-SQL에서 같지 않은 경우! = 또는 <>를 사용해야합니까? (0) | 2020.09.29 |
---|---|
Assert를 사용하여 예외가 발생했는지 확인하려면 어떻게합니까? (0) | 2020.09.29 |
data.frame에서 모든 또는 일부 NA (결 측값)가있는 행 제거 (0) | 2020.09.29 |
이전 커밋이 아닌 특정 커밋을 원격으로 푸시하려면 어떻게해야합니까? (0) | 2020.09.29 |
이진 세마포어와 뮤텍스의 차이점 (0) | 2020.09.29 |