Rustでsliceをシャッフルする

メモ書きです。

O'Reilly Japan - プログラミングRustを読んでいたら rand::Rng - Rustでsliceのシャッフルができるとあったので試したところrand::Rng::shuffleがdeprecatedになっていました。 SliceRandom::shuffleを使った例を残します。

Cargo.tomlは以下のとおりです。

[dependencies]
rand = "0.6.5"

実装例

use rand::seq::SliceRandom;

fn main() {
    let mut v = vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

    let mut rng = rand::thread_rng();
    v.shuffle(&mut rng);
    println!("{:?}", v); // [3, 4, 7, 6, 2, 0, 5, 9, 1, 8] 
}

deprecatedな実装

use rand::Rng;

fn main() {
    let mut v = vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

    let mut rng = rand::thread_rng();
    rng.shuffle(&mut v);
    println!("{:?}", v);
}
❯ cargo run
warning: use of deprecated item 'rand::Rng::shuffle': use SliceRandom::shuffle instead
 --> src/main.rs:7:9
  |
7 |     rng.shuffle(&mut v);
  |         ^^^^^^^
  |
  = note: #[warn(deprecated)] on by default

    Finished dev [unoptimized + debuginfo] target(s) in 0.64s
     Running `target/debug/rust-shuffle-slice`
[1, 2, 4, 8, 3, 5, 7, 0, 9, 6]

References