How can I initialize an array using a function?

后端 未结 3 2157
挽巷
挽巷 2020-11-28 16:24

I want to create an array of 10 empty vectors in Rust, but [Vec::new(); 10] doesn\'t work as Vec doesn\'t implement Copy. How can I do

3条回答
  •  误落风尘
    2020-11-28 16:58

    For your specific case, you can just use Default:

    let v: [Vec; 10] = Default::default();
    

    For the general case, you can create an iterator out of your function and then collect into the array using ArrayVec:

    use arrayvec::ArrayVec; // 0.4.10
    use std::iter;
    
    fn make(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]
    }
    

    See also:

    • How do I collect into an array?

提交回复
热议问题