diff --git a/src/random/seq.rs b/src/random/seq.rs new file mode 100644 index 0000000..621869c --- /dev/null +++ b/src/random/seq.rs @@ -0,0 +1,16 @@ +use crate::random::Rng; + +/// Trait for randomizing slices. +pub trait SliceRandom { + /// Shuffle the slice in place using the provided RNG. + fn shuffle(&mut self, rng: &mut R); +} + +impl SliceRandom for [T] { + fn shuffle(&mut self, rng: &mut R) { + for i in (1..self.len()).rev() { + let j = rng.random_range(0..(i + 1)); + self.swap(i, j); + } + } +}