Struct cogs_gamedev::chance::WeightedPicker [−][src]
pub struct WeightedPicker<T> { /* fields omitted */ }
Expand description
It’s often helpful to have weighted probabilities. This struct serves as a sort of weighted bag; you can give it entries with various weights, and then randomly sample them.
This is the way Minecraft loot tables work, if this sounds familiar.
The algorithm used is Vose’s Alias Method (scroll to the bottom), which to be honest I absolutely do not understand. But it has O(n) creation and O(1) selection, so sounds good to me.
You can’t edit the probabilities after you’ve created it due to the algorithm.
Implementations
impl<T> WeightedPicker<T>
[src]
impl<T> WeightedPicker<T>
[src]pub fn new(entries: Vec<(T, f64)>) -> Self
[src]
pub fn new(entries: Vec<(T, f64)>) -> Self
[src]Initialize a WeightedPicker from the given items and weights.
Panics if you pass it an empty Vec.
let picker = WeightedPicker::new(vec![ ("common", 10.0), ("uncommon", 5.0), ("rare", 2.0), ("legendary", 1.0), ("mythic", 0.1), ]); let mut rng = rand::thread_rng(); for _ in 0..10 { println!("- {}", picker.get(&mut rng)); } /* A sample output: - legendary - rare - uncommon - common - common - rare - uncommon - common - common - uncommon */
Trait Implementations
impl<T: Clone> Clone for WeightedPicker<T>
[src]
impl<T: Clone> Clone for WeightedPicker<T>
[src]fn clone(&self) -> WeightedPicker<T>
[src]
fn clone(&self) -> WeightedPicker<T>
[src]Returns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)
1.0.0[src]
fn clone_from(&mut self, source: &Self)
1.0.0[src]Performs copy-assignment from source
. Read more
Auto Trait Implementations
impl<T> RefUnwindSafe for WeightedPicker<T> where
T: RefUnwindSafe,
T: RefUnwindSafe,
impl<T> Send for WeightedPicker<T> where
T: Send,
T: Send,
impl<T> Sync for WeightedPicker<T> where
T: Sync,
T: Sync,
impl<T> Unpin for WeightedPicker<T> where
T: Unpin,
T: Unpin,
impl<T> UnwindSafe for WeightedPicker<T> where
T: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]pub fn borrow_mut(&mut self) -> &mut T
[src]
pub fn borrow_mut(&mut self) -> &mut T
[src]Mutably borrows from an owned value. Read more
impl<T> ToOwned for T where
T: Clone,
[src]
impl<T> ToOwned for T where
T: Clone,
[src]type Owned = T
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn to_owned(&self) -> T
[src]Creates owned data from borrowed data, usually by cloning. Read more
pub fn clone_into(&self, target: &mut T)
[src]
pub fn clone_into(&self, target: &mut T)
[src]🔬 This is a nightly-only experimental API. (toowned_clone_into
)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,