use*_*580 8 arrays vector rust
我想在 Rust 中创建一个包含 10 个空向量的数组,但[Vec::new(); 10]由于Vec没有实现Copy. 我怎样才能做到这一点,更一般地说,我怎样才能通过重复调用一个函数来初始化一个数组?
aed*_*edm 12
使用from_fn:
let array: [usize; 5] = core::array::from_fn(|i| i * 2);
assert_eq!(array, [0, 2, 4, 8, 10]);
Run Code Online (Sandbox Code Playgroud)
Min*_*uel 10
您可以将数组的.map()方法用于一般函数:
let arr: [Vec<u32>; 10] = [(); 10].map(|_| Vec::with_capacity(100));
Run Code Online (Sandbox Code Playgroud)
(对于 Rust 1.63.0,2022 年 8 月,请考虑使用from_fn)。
对于您的具体情况,您可以使用Default:
let v: [Vec<String>; 10] = Default::default();
Run Code Online (Sandbox Code Playgroud)
对于一般情况,您可以从函数中创建一个迭代器,然后使用以下方法收集到数组中ArrayVec:
use arrayvec::ArrayVec; // 0.4.10
use std::iter;
fn make<R>(f: impl FnMut() -> R) -> [R; 10] {
let a: ArrayVec<_> = iter::repeat_with(f).collect();
a.into_inner()
.unwrap_or_else(|_| panic!("Did not have enough elements"))
}
fn main() {
let mut a = 0;
let arr = make(|| {
a += 3;
a
});
println!("{:?}", arr);
// [3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
}
Run Code Online (Sandbox Code Playgroud)
也可以看看:
| 归档时间: |
|
| 查看次数: |
2870 次 |
| 最近记录: |