2017-07-06 103 views
5

, MyStruct küçük bir Kopyalama yapısı için FromIterator uygulamıyorum. Benim şu anki uygulama ancak for döngü olması gerektiği gibi deyimsel olduğundan emin değilim, bu sadece iyi çalışırRust'ta bir yineleyiciden bir dilimi doldurmanın en iyi yolu nedir?

fn from_iter<I: IntoIterator<Item=MyStruct>>(iter: I) -> Self { 
    let mut retval = [Default::default();4]; 

    for (ret, src) in retval.iter_mut().zip(iter) { 
     *ret = src; 
    } 

    retval 
} 

olduğunu. Belki bu daha temiz (ve belki de daha verimli) başarabilecek Slice::fill(iter) gibi bir yöntem var mı?

+0

Belki de sade, eski [harita] kullanabilirsiniz (https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.map)? – hellow

cevap

1

Döngüler iyi ve genellikle çok iyi bir şekilde optimize edilir.

Başka bir çözüm collect() için ArrayVec içine olabilir. Diziyi önce bir varsayılan değerle doldurmak zorunda kalmaz.