从数组中采样 N 个元素的函数

Function to sample N elements from array

假设我们有一个数组:

let arr: [u8; 10] = [1,2,3,4,5,6,7,8,9,10];

Rust 中是否有一个函数可以从中选择 N 个随机元素而不重复?等同于 python 的 random.sample 函数。

您可以使用 sample 获取索引样本,然后迭代并从原始数组中获取:

use rand::prelude::*;
use rand::seq::index::sample;

fn main() {
    let mut rng = rand::thread_rng();
    let arr: [u8; 10] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    let sample: Vec<u8> = sample(&mut rng, arr.len(), 3)
        .iter()
        .map(|i| arr[i])
        .collect();
}

Playground

您可以使用 choose_multiple:

use rand::prelude::*;

fn main() {
    let mut rng = rand::thread_rng();
    let arr: [u8; 10] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    let sample: Vec<_> = arr.choose_multiple (&mut rng, 3).collect();
    println!("{:?}", sample);
}

Playground