Skip to content

sample

Picks count different elements at random (without replacement), in random order.

Elements are different by position: two equal values in items can both be picked. When count is at least items.len(), every element is returned, shuffled.

use helpers4::random::sample;

Cargo feature random (enabled by default). To compile only this module:

cargo add helpers4 --no-default-features --features random

or in Cargo.toml:

[dependencies]
helpers4 = { version = "0.0.9", default-features = false, features = ["random"] }
pub fn sample<T: Clone>(items: &[T], count: usize, rng: &mut Rng) -> Vec<T>
ParameterTypeDescription
items&[T]The elements to pick from.
countusizeHow many to pick.
rng&mut RngThe generator that decides the picks.

Vec<T> — A new Vec of min(count, items.len()) elements.

use helpers4::random::{sample, Rng};

let winners = sample(&["ana", "bo", "cy", "di", "ed"], 2, &mut Rng::seeded(1));
assert_eq!(winners.len(), 2);
assert_ne!(winners[0], winners[1]);

assert_eq!(sample(&[1, 2], 10, &mut Rng::seeded(1)).len(), 2);

src/random/sample.rs