2015-04-16 11 views
16

वहाँ एक और अधिक प्रत्यक्ष और पठनीय रास्ता पूरा करने के लिए है निम्नलिखित:मैं दो से अधिक इटरेटर कैसे ज़िप कर सकता हूं?

let a = [1,2,3]; 
let b = [4,5,6]; 
let c = [7,8,9]; 
let iter = a.iter().zip(b.iter()).zip(c.iter()).map(|((x,y), z)| (x,y,z)); 

है, मैं कैसे जो एन-tuples पैदावार n iterables से पुनरावर्तक का निर्माण कर सकते हैं?

उत्तर

20

आप टोकरा itertools, जो 1- से 8-tuples के लिए इस को लागू करता है से multizip उपयोग कर सकते हैं:

extern crate itertools; 
use itertools::multizip; 

fn main() { 

    let a = [1,2,3]; 
    let b = [4,5,6]; 
    let c = [7,8,9]; 

    // multizip accepts iterators and/or values with IntoIterator. 
    for (x, y, z) in multizip((&a, &b, &c)) { 
    } 

} 

आप Cargo.toml में itertools पर निर्भरता जोड़ना होगा, उपयोग जो कुछ संस्करण है नवीनतम। उदाहरण:

[dependencies] 
itertools = "0.6.1" 
+0

मुझे पसंद है। अब तक स्वीकार करना जब तक कि किसी के पास 'std' – anderspitman

+0

से कुछ नहीं है, क्या आप इनमें से किसी एक को अनजिप कर सकते हैं और संग्रहों का एक समूह प्राप्त कर सकते हैं? –

+0

हां, 'Iterator 'पर .unzip() देखें (यद्यपि केवल जोड़ी केस को कवर करता है)। – bluss

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