如何使用 Rust 中的 rand crate 输入用于生成随机数的整数种子?

Kat*_*ina 7 random rust random-seed rust-crates

在 Rust 项目中,我想根据我在 Java 中习惯的整数种子生成可重现的随机数。

对于文档Seedrand箱子状态:

种子类型,仅限于作为 u8 数组可变地取消引用的类型(我们推荐 [u8; N] 表示某些 N)。

这是否意味着不可能使用整数种子?如果可能,我如何使用StdRng完整的种子?

mic*_*srb 7

看看这个功能: StdRng::seed_from_u64

它来自SeedableRng特性,即StdRng实现了。

例如:

let mut r = StdRng::seed_from_u64(42);
Run Code Online (Sandbox Code Playgroud)

请注意,只要您在同一平台上使用相同的构建,这将为您提供可重复的随机数,但StdRng不能保证平台和库版本之间的内部实现保持相同!如果平台和构建之间的可重复性对您很重要,那么请查看诸如rand_chacha, rand_pcg, 之类的板条箱rand_xoshiro


Ger*_*ler 6

我将分享我自己的答案,因为我必须进行更多搜索才能实现我的目标。

Cargo.toml

[dependencies]
rand = "0.7.3"
rand_distr = "0.3.0"
Run Code Online (Sandbox Code Playgroud)

代码:

[dependencies]
rand = "0.7.3"
rand_distr = "0.3.0"
Run Code Online (Sandbox Code Playgroud)

我的输出:

Normal Sample1: 12.75371699717887
Normal Sample2: 10.82577389791956
Random u8: 194
Random u16: 7290
Run Code Online (Sandbox Code Playgroud)

正如michaelsrb在他的回答中提到的 ,请注意,这将保证在(构建 - 平台)上的不同运行中具有相同的值,两个月后的版本中使用的相同种子可能会给出不同的值。