6

単語のリストからランダムな単語を選択することになっている関数があります。

pub fn random_words<'a, I, R>(rng: &mut R, n: usize, words: I) -> Vec<&'a str>
where
    I: IntoIterator<Item = &'a str>,
    R: rand::Rng,
{
    rand::sample(rng, words.into_iter(), n)
}

おそらくそれは合理的な署名です。実際には関数内に文字列自体は必要ないため、参照を処理する方が完全なString.

Vec<String>プログラムがファイルから読み取る with ワードをこの関数にエレガントかつ効率的に渡すにはどうすればよいですか? 私はこれまでに得ました:

extern crate rand;

fn main() {
    let mut rng = rand::thread_rng();
    let wordlist: Vec<String> = vec!["a".to_string(), "b".to_string()];

    let words = random_words(&mut rng, 4, wordlist.iter().map(|s| s.as_ref()));
}

それは適切な方法ですか?参照を取得するために単語のリストを明示的にマッピングせずにこれを記述できますか?

4

1 に答える 1