From 6fd796cceb55f3fd12a1df2a06a641539cdd108c Mon Sep 17 00:00:00 2001 From: Palash Tyagi <23239946+Magnus167@users.noreply.github.com> Date: Mon, 28 Jul 2025 20:17:35 +0100 Subject: [PATCH] Add SliceRandom trait for shuffling slices using RNG --- src/random/seq.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/random/seq.rs 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); + } + } +}