我需要用随机值(不是 Vec 或切片)初始化一个 16 字节数组。
我目前正在使用:
let mut rng = rand::thread_rng();
let mut foo = [0u8; 16];
rng.fill(&mut foo);
let foo = foo; // discard mutability
但这似乎不必要地冗长,并且将数组写入两次(首先,用零初始化,然后写入随机值)。
我可以将数组初始化为随机值,而不是将其初始化为零并更新为随机值吗?
您可以结合使用 rand 箱提供的数组初始化语法和迭代器方法来实现更简洁高效的初始化,如下所示:
use rand::{Rng, distributions::Standard};
fn main() {
let rng = rand::thread_rng();
// Create an array of 16 random u8 values
let foo: [u8; 16] = rng.sample_iter(Standard).take(16).collect::<Vec<u8>>().try_into().unwrap_or_else(|v: Vec<u8>| panic!("Expected a Vec of length 16 but it was {}", v.len()));
// Use foo as needed
println!("{:?}", foo);
}