2015-04-16 15 views
16

gerçekleştirmek için daha doğrudan ve okunabilir bir yolu var mı şu: isİkiden fazla yineleyici nasıl sıkıştırılır?

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)); 

, nasıl, n-dizilerini verir n Iterables gelen bir yineleyici inşa edebilirsiniz?

Sen 1 ila 8-tuplelar için bu uygulayan sandık itertools gelen multizip kullanabilirsiniz

cevap

20

: sürüm ne olursa olsun

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)) { 
    } 

} 

Sen Cargo.toml içinde itertools bir bağımlılık ekleme olurdu, kullanım son. Örnek: Sevdiğim

[dependencies] 
itertools = "0.6.1" 
+0

. Birisi şu andan itibaren kabul etmiyorsa 'std' – anderspitman

+0

Bunlardan birini açıp koleksiyon koleksiyonunu alabilir misin? –

+0

Evet, 'Iterator'daki .unzip() işlevine bakın (ancak, yalnızca çiftini gösterir). – bluss