サーチ…


前書き

Rustには、 rand crateを通じて乱数生成機能を提供する機能が組み込まれています。 Rust標準ライブラリの一部として、 Randクレートの機能が分離され、Rustプロジェクトの残りの部分とは別にその開発が安定するようになりました。このトピックでは、単にrand crateを追加してから、Rustで乱数を生成して出力する方法について説明します。

備考

スレッドローカルストレージに格納された各スレッドに関連付けられたRNGの組み込みサポートがあります。このRNGはthread_rng経由でアクセスすることも、 random暗黙的に使用することもできます。このRNGは、通常、Unixシステムではオペレーティングシステムの乱数発生源(例えば、 /dev/urandomからランダムにシードされ、32 KiBのランダムデータを生成した後、このソースから自動的に再シードされます。

暗号化の目的でエントロピーソースを必要とするアプリケーションでは、オペレーティングシステムが提供するソース(Unixでは/dev/urandom 、WindowsではCryptGenRandom()からランダム性を読み取るOsRng使用する必要があります。このモジュールによって提供される他の乱数生成器は、そのような目的には適していません。

ランドで2つの乱数を生成する

まず、クレートをCargo.tomlファイルに依存関係として追加する必要があります。

[dependencies]
rand = "0.3"

これにより、 crates.ioからrand crateが取得されます。次に、これをクレートルートに追加します。

extern crate rand;

この例では、端末からの簡単な出力を提供するため、main関数を作成し、ランダムに生成された2つの数値をコンソールに出力します。この例では、スレッドローカル乱数ジェネレータがキャッシュされます。複数の値を生成する場合、これはより効率的であることがよくあります。

use rand::Rng;

fn main() {
    
    let mut rng = rand::thread_rng();
    
    if rng.gen() { // random bool
        println!("i32: {}, u32: {}", rng.gen::<i32>(), rng.gen::<u32>())
    }
}

この例を実行すると、コンソールに次の応答が表示されます。

$ cargo run
     Running `target/debug/so`
i32: 1568599182, u32: 2222135793

ランドで文字を生成する

文字を生成するために、あなたは、スレッドローカル乱数ジェネレータの機能を利用することができますrandom

fn main() {
    let tuple = rand::random::<(f64, char)>();
    println!("{:?}", tuple)
}

上記のような偶発的または特異的なリクエストの場合、これは妥当な効率的な方法です。しかし、少数の数字を生成する場合は、ジェネレータのキャッシュが効率的になることがわかります。

この場合、次の出力が表示されるはずです。

$ cargo run
     Running `target/debug/so`
(0.906881, '\u{9edc}')


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow