2017-07-06 4 views
5

Ich implementiere FromIterator für [MyStruct;4] wo MyStruct ist eine kleine Kopie Struktur. Meine aktuelle Implementierung istWas ist der beste Weg, um ein Stück von einem Iterator in Rust zu füllen?

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 
} 

Das funktioniert ganz gut, aber ich bin mir nicht sicher, dass die for Schleife als idiomatische ist, wie es sein könnte. Gibt es vielleicht eine Methode wie Slice::fill(iter), die dies sauberer (und vielleicht effizienter) erreichen könnte?

+0

Vielleicht können Sie einfach plain, alt [map] (https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.map) verwenden? – hellow

Antwort

1

Schleifen sind in Ordnung und sie optimieren im Allgemeinen sehr gut.

Eine andere Lösung kann collect() in eine ArrayVec sein. Es vermeidet, zuerst das Array mit einem Standardwert zu füllen.

Verwandte Themen