eryon_core/traits/shuffle.rs
1/*
2 Appellation: shuffle <module>
3 Contrib: @FL03
4*/
5
6/// A trait for shuffling a collection
7pub trait Shuffle {
8 fn shuffle(&mut self, rng: &mut impl rand::Rng);
9}
10
11impl<T> Shuffle for Vec<T> {
12 fn shuffle(&mut self, rng: &mut impl rand::Rng) {
13 for i in (1..self.len()).rev() {
14 let j = rng.random_range(0..=i);
15 self.swap(i, j);
16 }
17 }
18}