Crate random_pick[−][src]
Random Pick
Pick an element from a slice randomly by given weights.
Example
extern crate random_pick; enum Prize { Legendary, Rare, Enchanted, Common, } let prize_list = [Prize::Legendary, Prize::Rare, Prize::Enchanted, Prize::Common]; // available prizes let slice = &prize_list; let weights = [1, 5, 15, 30]; // a scale of chance of picking each kind of prize let n = 1000000; let mut counter = [0usize; 4]; for _ in 0..n { let picked_item = random_pick::pick_from_slice(slice, &weights).unwrap(); match picked_item { Prize::Legendary=>{ counter[0] += 1; } Prize::Rare=>{ counter[1] += 1; } Prize::Enchanted=>{ counter[2] += 1; } Prize::Common=>{ counter[3] += 1; } } } println!("{}", counter[0]); // Should be close to 20000 println!("{}", counter[1]); // Should be close to 100000 println!("{}", counter[2]); // Should be close to 300000 println!("{}", counter[3]); // Should be close to 600000
The length of the slice is usually an integral multiple (larger than zero) of that of weights.
Functions
gen_usize_with_weights |
Get a usize value by given weights. |
pick_from_slice |
Pick an element from a slice randomly by given weights. |