【发布时间】:2018-12-13 04:27:46
【问题描述】:
我有一个std::collections::HashSet,我想采样并删除一个均匀随机的元素。
目前,我正在做的是使用rand.gen_range 对索引进行随机抽样,然后将HashSet 迭代到该索引以获取元素。然后我删除选定的元素。这有效,但效率不高。有没有一种有效的方法来随机抽样一个元素?
这是我的代码的精简版:
use std::collections::HashSet;
extern crate rand;
use rand::thread_rng;
use rand::Rng;
let mut hash_set = HashSet::new();
// ... Fill up hash_set ...
let index = thread_rng().gen_range(0, hash_set.len());
let element = hash_set.iter().nth(index).unwrap().clone();
hash_set.remove(&element);
// ... Use element ...
【问题讨论】: