Struct rand::distributions::Slice [−][src]
pub struct Slice<'a, T> { /* fields omitted */ }
A distribution to sample items uniformly from a slice.
Slice::new
constructs a distribution referencing a slice and uniformly
samples references from the items in the slice. It may do extra work up
front to make sampling of multiple values faster; if only one sample from
the slice is required, SliceRandom::choose
can be more efficient.
Steps are taken to avoid bias which might be present in naive
implementations; for example slice[rng.gen() % slice.len()]
samples from
the slice, but may be more likely to select numbers in the low range than
other values.
This distribution samples with replacement; each sample is independent.
Sampling without replacement requires state to be retained, and therefore
cannot be handled by a distribution; you should instead consider methods
on SliceRandom
, such as SliceRandom::choose_multiple
.
Example
use rand::Rng; use rand::distributions::Slice; let vowels = ['a', 'e', 'i', 'o', 'u']; let vowels_dist = Slice::new(&vowels).unwrap(); let rng = rand::thread_rng(); // build a string of 10 vowels let vowel_string: String = rng .sample_iter(&vowels_dist) .take(10) .collect(); println!("{}", vowel_string); assert_eq!(vowel_string.len(), 10); assert!(vowel_string.chars().all(|c| vowels.contains(&c)));
For a single sample, SliceRandom::choose
may be preferred:
use rand::seq::SliceRandom; let vowels = ['a', 'e', 'i', 'o', 'u']; let mut rng = rand::thread_rng(); println!("{}", vowels.choose(&mut rng).unwrap())
Implementations
impl<'a, T> Slice<'a, T>
[src]
impl<'a, T> Slice<'a, T>
[src]Trait Implementations
impl<'a, T> Distribution<&'a T> for Slice<'a, T>
[src]
impl<'a, T> Distribution<&'a T> for Slice<'a, T>
[src]impl<'a, T: Copy> Copy for Slice<'a, T>
[src]
Auto Trait Implementations
impl<'a, T> RefUnwindSafe for Slice<'a, T> where
T: RefUnwindSafe,
T: RefUnwindSafe,
impl<'a, T> Send for Slice<'a, T> where
T: Sync,
T: Sync,
impl<'a, T> Sync for Slice<'a, T> where
T: Sync,
T: Sync,
impl<'a, T> Unpin for Slice<'a, T>
impl<'a, T> UnwindSafe for Slice<'a, T> where
T: RefUnwindSafe,
T: RefUnwindSafe,