[−][src]Struct rand::distributions::WeightedChoice
A distribution that selects from a finite collection of weighted items.
Each item has an associated weight that influences how likely it is to be chosen: higher weight is more likely.
The Clone
restriction is a limitation of the Distribution
trait.
Note that &T
is (cheaply) Clone
for all T
, as is u32
, so one can
store references or indices into another vector.
Example
use rand::distributions::{Weighted, WeightedChoice, Distribution}; let mut items = vec!(Weighted { weight: 2, item: 'a' }, Weighted { weight: 4, item: 'b' }, Weighted { weight: 1, item: 'c' }); let wc = WeightedChoice::new(&mut items); let mut rng = rand::thread_rng(); for _ in 0..16 { // on average prints 'a' 4 times, 'b' 8 and 'c' twice. println!("{}", wc.sample(&mut rng)); }
Implementations
impl<'a, T: Clone> WeightedChoice<'a, T>
[src]
pub fn new(items: &'a mut [Weighted<T>]) -> WeightedChoice<'a, T>
[src]
Create a new WeightedChoice
.
Panics if:
items
is empty- the total weight is 0
- the total weight is larger than a
u32
can contain.
Trait Implementations
impl<'a, T: Debug + 'a> Debug for WeightedChoice<'a, T>
[src]
impl<'a, T: Clone> Distribution<T> for WeightedChoice<'a, T>
[src]
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> T
[src]
fn sample_iter<'a, R>(&'a self, rng: &'a mut R) -> DistIter<'a, Self, R, T>ⓘ where
Self: Sized,
R: Rng,
[src]
Self: Sized,
R: Rng,
impl<'a, T: Clone> IndependentSample<T> for WeightedChoice<'a, T>
[src]
fn ind_sample<R: Rng>(&self, rng: &mut R) -> T
[src]
impl<'a, T: Clone> Sample<T> for WeightedChoice<'a, T>
[src]
Auto Trait Implementations
impl<'a, T> RefUnwindSafe for WeightedChoice<'a, T> where
T: RefUnwindSafe,
T: RefUnwindSafe,
impl<'a, T> Send for WeightedChoice<'a, T> where
T: Send,
T: Send,
impl<'a, T> Sync for WeightedChoice<'a, T> where
T: Sync,
T: Sync,
impl<'a, T> Unpin for WeightedChoice<'a, T>
impl<'a, T> !UnwindSafe for WeightedChoice<'a, T>
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,