2017-07-06 24 views
5

मैं FromIterator को [MyStruct;4] के लिए कार्यान्वित कर रहा हूं जहां MyStruct एक छोटी प्रतिलिपि संरचना है। मेरे वर्तमान कार्यान्वयनजंग में एक पुनरावर्तक से एक टुकड़ा भरने का सबसे अच्छा तरीका क्या है?

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 
} 

है यह सिर्फ ठीक काम करता है, फिर भी मुझे यकीन है कि for लूप के रूप में मुहावरेदार यह हो सकता है के रूप में है नहीं कर रहा हूँ। क्या शायद Slice::fill(iter) जैसी कोई विधि है जो इसे और अधिक साफ (और शायद अधिक कुशलतापूर्वक) पूरा कर सकती है?

+0

शायद आप केवल सादे, पुराने [मानचित्र] (https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.map) का उपयोग कर सकते हैं? – hellow

उत्तर

1

लूप्स ठीक हैं और वे आम तौर पर बहुत अच्छी तरह अनुकूल होते हैं।

एक और समाधान collect()ArrayVec में हो सकता है। यह पहले डिफ़ॉल्ट मान के साथ सरणी भरने से बचाता है।

संबंधित मुद्दे