回答:
使用する rand(range)
Rubyの乱数から:
6面ダイスのロールをシミュレートするためにランダムな整数が必要な場合は、次を使用します
1 + rand(6)
。クラップスのロールはでシミュレートできます2 + rand(6) + rand(6)
。最後に、ランダムなフロートが必要な場合
rand
は、引数なしで呼び出します。
マルク=アンドレ・Lafortuneはに言及し(それupvote行く)以下の彼の答え、Rubyの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桁の乱数を生成することで示されているように、インスタンスメソッドだけがaを取ることができます。Range
「ゼロ以上で引数未満のランダムな整数」を返すRandom.new.rand(20..30)
ので20 + Random.rand(11)
、がと同等になるのはこのためです。30を含み、11を除く0から11の間の乱数を考え出す必要があります。Random.rand(int)
20..30
Random
クラスについて言及したのは素晴らしいことですRandom.new
が、例のように複数回呼び出すのはひどい考えです。私はそれを述べるために私の答えを編集しました。
Random.rand
実際に、範囲を受け入れます。(1.9.3以降、私は信じています。)
あなたが使用できる間 rand(42-10) + 10
の間の乱数を取得する10
と42
(10包括的で、42排他的な場所)、あなたが呼び出すことができますルビー1.9.3、以来、より良い方法があります:
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
オブジェクトをマーシャリングできるので簡単)backports
gemは、単に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も探しているのであれば、1.9.2以降でSecureRandom
モジュールがActiveSupport
rubyコアに到達したことを言及しておく価値があります。したがって、本格的なフレームワークは必要ありません。
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
方法がなければならないinteger
、または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)
単純に使用できますrandom_number
。
正の整数がnとして指定されている場合、random_number
整数を返します:0 <=random_number
<n。
次のように使用します。
any_number = SecureRandom.random_number(100)
出力は0から100までの任意の数値になります。
このリンクは、これに関して役立つでしょう。
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