Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Rubyで乱数と文字列を生成する方法

Rubyで乱数と文字列を生成する方法を学びたい場合は、適切な場所にいます。

それがまさにこの記事の内容だからです!

乱数を使用すると、ランダムな要素を選択できます 配列から、リストから勝者を選び、サイコロを振るなど。

Rubyでは、さまざまなプロパティを持つ乱数を生成する方法がたくさんあります。

たとえば…

randメソッドは、次の3つの方法で使用できます。

  • 引数なしで、rand 浮動小数点0と1の間の数値を提供します (0.4836732493など)
  • 整数を使用 引数(rand(10) )0とその数値の間の新しい整数を取得します
  • 範囲 引数(rand(1..20) )範囲の開始と範囲の終了の間の整数を取得します

Rubyでランダム性を生成する他の方法は次のとおりです。

  • Array#shuffle メソッド
  • Array#sample メソッド
  • SecureRandom クラス

いくつかの例を見てみましょう!

乱数の生成

ランドを使用してRuby乱数を生成できます 方法:

Rubyで乱数と文字列を生成する方法

ランドは浮動小数点数を生成します(0.4836732493 )引数なしで呼び出された場合。

randに引数を渡すことができます ゼロから始まり(ただし含まない)までの数値を生成します )その番号。

rand 100
> 41

Rubyの乱数の生成は非常に簡単ですが、ゼロから開始するのではなく、特定の範囲内にある必要がある場合はどうでしょうか。

問題ありません!

範囲を使用して、必要なものを正確に取得できます。

rand 200..500
> 352

安全なRuby乱数

randによって生成された数値は、単純なアプリケーションには十分かもしれません…

…ただし、パスワードリセットトークンの生成などのセキュリティ目的で使用する場合は、 SecureRandomを使用する必要があります。 、これはRuby標準ライブラリの一部です。

SecureRandomは、UnixシステムおよびWindowsではCryptAcquireContext /CryptGenRandomAPIを使用して/dev/urandomからジェネレータをシードします。

ここに例があります

require 'securerandom'

SecureRandom.random_number
> 0.232

ご覧のとおり、これはrandとよく似ています。 、最大数を渡すこともできます。

SecureRandom.random_number(100)
> 72

SecureRandom 他の出力形式も利用できます。

hexを使用する 16進数の固定幅の文字列を生成できます。

SecureRandom.hex
> "87694e9e5231abca6de39c58cdfbe307"

Ruby 2.5では、ランダムな英数字の文字列を生成する新しいメソッドが導入されました。

SecureRandom.alphanumeric
> "PSNVXOeDpnFikJPC"

配列からランダム要素を選択する方法

今:

リストからランダムに選択することをお勧めします 。

これを試すことができます:

[5, 15, 30, 60].shuffle.first
> 30

ただし、Rubyにはサンプルがあります このタスクにより適した(そしてより速い)方法:

[5, 15, 30, 60].sample
> 5

サンプルを使用できます 範囲の場合、このコードはランダムな文字を生成します:

('a'..'z').to_a.sample
> b

整数の引数をサンプルに渡して、N個の一意の要素を取得できます。 配列から:

[1,2,3].sample(2)
> [1, 2]

カスタムランダムジェネレーターを引数として渡すこともできます:

[1,2,3].sample(random: SecureRandom)

ルビーランダム文字列

究極のランダム性アプリケーションは、カスタム文字セットを使用してランダムな文字列を生成することです。コードは次のとおりです:

def generate_code(number)
  charset = Array('A'..'Z') + Array('a'..'z')
  Array.new(number) { charset.sample }.join
end

puts generate_code(20)

ここで起こっていることがいくつかあります。

まず、範囲を使用して文字セットを準備し、それらを配列に変換します。次に、Array.newの呼び出しを利用します ブロックを使用して、サイズnの配列を初期化できます。 ブロックによって生成された値を使用します。

このコードは、次の形式の文字列を生成します:TufwGfXZskHlPcYrLNKg

必要に応じて文字セットを微調整できます。

乱数ジェネレーターのシード

randなどの方法を使用するときに生成される数値を制御する場合 その後、シードを設定できます。

シードとは何ですか?

シードは、一連の乱数を開始する数値です。

生成されたすべての数値は、このシードから派生です。 。

そのため、通常、シードの品質が乱数の適切なシーケンスを生成するための鍵となります。

Rubyはすでにそれを処理します(SecureRandomを使用してください) 追加のセキュリティが必要な場合)が、一部のシナリオ(主にテストとデバッグ)では、このシードを自分で設定することをお勧めします。

これはsrandで行うことができます メソッド。

このように

Kernel.srand(1)

このシードを使用すると、ジェネレーターが提供する数値を正確に知ることができます。

シードとしてのナンバー1の場合

Array.new(5) { rand(1..10) }
# [6, 9, 10, 6, 1]

シードを再度1に設定すると、シーケンスは6から始まり、9、10などになります。

結論

それでおしまい!これで、Rubyプログラムでランダム性を使い始める準備ができました🙂

この投稿は役に立ちましたか?

友達と共有してニュースレターを購読 だから、新しいものを見逃すことはありません!


  1. 加重乱数を生成する方法

    乱数は通常、「一様分布」と呼ばれるものに従います。つまり、いずれかの番号が選択される可能性が同じです。 ただし、一部の数値を他の数値よりも頻繁に選択する場合は、別の戦略が必要になります。加重乱数ジェネレーター 。 いくつかの実用的なアプリケーションは次のとおりです。 ビデオゲームの戦利品テーブル。敵はさまざまなドロップ率でさまざまなアイテムをドロップできます。 より多くのチケットを持っている人が勝つチャンスが多いラッフル。 シンプルな戦略 ラッフルの例を考えると、明らかな解決策を思いつくことができます。「チケット」ごとにアイテムのコピーが1つある配列を生成します。 たとえば、ジョン

  2. Rubyでの乱数の生成

    乱数は、ゲーム、暗号化、建物のシミュレーションなど、さまざまな目的に役立ちます。技術的には、コンピューターは純粋に計算によって乱数を生成することはできません。決定論的なデバイスで真に乱数を生成することは基本的に不可能です。期待できる最善の方法は、疑似乱数です。これは、ランダムに生成されたかのように見える一連の数値です。 この記事では、Rubyで乱数を生成するさまざまな方法を見ていきます。 Kernel#randを使用した乱数の生成 まず、randを使用して乱数を生成しましょう。 方法。メソッドが引数なしで呼び出されると、0.0以上1.0未満のfloatが返されます。 rand() >