답변:
사용하다 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..3030을 포함하면 11을 제외하고 0에서 11 사이의 임의의 숫자가 필요합니다.
Random클래스 를 언급하기 위해 답변을 편집 한 것이 좋지만, Random.new예와 같이 여러 번 호출하는 것은 끔찍한 아이디어 입니다. 그 대답을 편집했습니다.
Random.rand 않습니다 실제로 범위를 받아들입니다. (1.9.3부터 믿습니다.)
와 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객체가 마샬링 될 수 있으므로 쉬움 )backportsgem은 단순히 RUby 1.8.7, 1.9.1, 1.9.2에 새로 도입되었지만 Ruby로 구현 된 메소드 모음입니다. RubySpec을 사용하여 결과가 Ruby와 호환되는지 확인합니다.
Random.rand(10..42)작동하지 않습니다. Random.rand클래스 메소드는 범위를 허용하지 않습니다. (Ruby 1.9.2p180)
숫자뿐만 아니라 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)
SecureRandom.random_number(1000..9999)
SecureRandom.random_number()범위를 가지지 않으므로 아닙니다. 아마도 SecureRandom.random_number(10_000)(0-9999의 경우) 또는 SecureRandom.random_number(9_000)+1_000(1000-9999의 경우) 와 같은 것을 원할 것입니다 .
이 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(1..6)독서를 최고 답보다 명확하게 사용한다고 생각합니다 rand(6)+1.
글쎄, 나는 알아 냈다. rand라는 내장 (?) 함수가 있습니다.
rand(n + 1)
누군가가 더 자세한 답변으로 대답하면 정답으로 표시합니다.
질문에 대한 가장 간단한 답변 :
rand(0..n)
이 링크는 이와 관련하여 도움이 될 것입니다.
http://ruby-doc.org/core-1.9.3/Random.html
그리고 루비의 난수보다 더 명확합니다.
0에서 10까지의 정수 생성
puts (rand() * 10).to_i
더 읽기 쉬운 방식으로 0에서 10까지의 숫자 생성
puts rand(10)
15를 포함하여 10에서 15까지의 숫자 생성
puts rand(10..15)
비 랜덤 난수
프로그램이 실행될 때마다 같은 숫자의 시퀀스를 생성
srand(5)
10 개의 난수 생성
puts (0..10).map{rand(0..10)}
아마 당신을 도울 것입니다. 내 앱에서 이것을 사용합니다.
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
그것은 나를 위해 잘 작동
시도 array#shuffle무작위위한 방법을
array = (1..10).to_a
array.shuffle.first
.shuffle.first와 함께 .sample!
srand <some_number>를 작성하기 전에 사용rand하면 필요한 경우 결정적 (즉, 반복 가능한) 의사 랜덤 시퀀스가 제공됩니다. ruby-doc.org/core-2.5.6/Random.html#method-c-srand