random_constructible/sample.rs
1// ---------------- [ File: random-constructible/src/sample.rs ]
2crate::ix!();
3
4pub fn sample_variants_with_probabilities<K: Clone + Eq + Hash + Sized, RNG: Rng + ?Sized>(rng: &mut RNG, probs: &HashMap<K,f64>)
5-> K
6{
7 let variants: Vec<_> = probs.keys().cloned().collect();
8 let weights: Vec<_> = variants.iter().map(|v| probs[v]).collect();
9 let dist = rand::distributions::WeightedIndex::new(&weights).unwrap();
10 variants[dist.sample(rng)].clone()
11}