pub struct Slice<'a, T> { /* private fields */ }
Expand description
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§
Trait Implementations§
Source§impl<'a, T> Distribution<&'a T> for Slice<'a, T>
impl<'a, T> Distribution<&'a T> for Slice<'a, T>
impl<'a, T: Copy> Copy for Slice<'a, T>
Auto Trait Implementations§
impl<'a, T> Freeze for Slice<'a, T>
impl<'a, T> RefUnwindSafe for Slice<'a, T>where
T: RefUnwindSafe,
impl<'a, T> Send for Slice<'a, T>where
T: Sync,
impl<'a, T> Sync for Slice<'a, T>where
T: Sync,
impl<'a, T> Unpin for Slice<'a, T>
impl<'a, T> UnwindSafe for Slice<'a, T>where
T: RefUnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 40 bytes