Random 如何使用种子确定地洗牌数组?

Random 如何使用种子确定地洗牌数组?,random,rust,shuffle,random-seed,Random,Rust,Shuffle,Random Seed,我发现很难确定地洗牌一个数组,也就是说,用一个锈迹斑斑的随机种子。我试图实现的目标(在伪代码中): 我学会了如何使用非确定性地洗牌向量,但它似乎没有提供将随机种子应用到生成函数的API,我自己也很难想出一个不使用一些荒谬的n复杂度算法。使用一个随机数生成器来实现trait并使用所需种子调用 例如: use rand::{seq::SliceRandom, SeedableRng}; // 0.6.5 use rand_chacha::ChaChaRng; // 0.1.1 fn main()

我发现很难确定地洗牌一个数组,也就是说,用一个锈迹斑斑的随机种子。我试图实现的目标(在伪代码中):


我学会了如何使用非确定性地洗牌向量,但它似乎没有提供将随机种子应用到生成函数的API,我自己也很难想出一个不使用一些荒谬的
n复杂度算法。

使用一个随机数生成器来实现trait并使用所需种子调用

例如:

use rand::{seq::SliceRandom, SeedableRng}; // 0.6.5
use rand_chacha::ChaChaRng; // 0.1.1

fn main() {
    let seed = [0; 32];
    let mut rng = ChaChaRng::from_seed(seed);

    let mut v1 = vec![1, 2, 3, 4, 5];
    v1.shuffle(&mut rng);
    assert_eq!(v1, [3, 5, 2, 4, 1]);
}
在使用之前克隆RNG,或者使用相同的种子从头开始创建一个新的RNG,以重置回原始状态


你可能也对我感兴趣。

完全没有注意到这个特点,我是个甜甜圈。非常感谢!
use rand::{seq::SliceRandom, SeedableRng}; // 0.6.5
use rand_chacha::ChaChaRng; // 0.1.1

fn main() {
    let seed = [0; 32];
    let mut rng = ChaChaRng::from_seed(seed);

    let mut v1 = vec![1, 2, 3, 4, 5];
    v1.shuffle(&mut rng);
    assert_eq!(v1, [3, 5, 2, 4, 1]);
}