Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 如何在从索引I和I+1获取值的数组上创建迭代器?_Loops_Rust_Iterator - Fatal编程技术网

Loops 如何在从索引I和I+1获取值的数组上创建迭代器?

Loops 如何在从索引I和I+1获取值的数组上创建迭代器?,loops,rust,iterator,Loops,Rust,Iterator,我创建了一个在铁锈操场上运行的小示例: #[derive(Clone)] pub struct Person { pub firstname: Vec<u8>, pub surname: Vec<u8>, } fn main() { let p0 = Person { firstname: vec![0u8; 5], surname: vec![1u8; 5], }; let p1 = Person

我创建了一个在铁锈操场上运行的小示例:

#[derive(Clone)]
pub struct Person {
    pub firstname: Vec<u8>,
    pub surname: Vec<u8>,
}

fn main() {
    let p0 = Person {
        firstname: vec![0u8; 5],
        surname: vec![1u8; 5],
    };
    let p1 = Person {
        firstname: vec![2u8; 7],
        surname: vec![3u8; 2],
    };
    let p2 = Person {
        firstname: vec![4u8; 8],
        surname: vec![5u8; 8],
    };
    let p3 = Person {
        firstname: vec![6u8; 3],
        surname: vec![7u8; 1],
    };

    let people = [p0, p1, p2, p3];

    for i in 0..people.len() {
        if i + 1 < people.len() {
            println!(
                "{:?}",
                (people[i].firstname.clone(), people[i + 1].surname.clone())
            )
        }
    }
}

给定数组people,我想迭代它的元素并收集索引I处的人的名字和索引I+1处的人的姓氏的元组。这个简单的for循环完成了这项工作,但是让我们假设,我希望将这样的元组传递到某个函数f中,而不是println。在这个for循环中,我可以很容易地做到这一点,但我想了解我是否可以使用迭代器iter实现它,然后在需要时应用collect或fold函数,而不是使用for循环

您可以组合两种功能:

创建跳过第一个元素iter.skip1的数组迭代器。
您可以组合两个功能:

创建跳过第一个元素iter.skip1的数组迭代器。 我将使用:

另见:

我将使用:

另见:


我想补充一下这个建议。@Stargateur这就是等价物。。。另见一节中的问题。因为这个案例是从一个数组/切片开始的,所以我觉得不需要直接提到它。我想补充一下这个建议。@Stargateur这就是等价物。。。另见一节中的问题。因为这个案例是从一个数组/切片开始的,所以我觉得不需要直接提到它。
#[derive(Clone)]
pub struct Person {
    pub firstname: Vec<u8>,
    pub surname: Vec<u8>,
}

fn main() {
    let p0 = Person {
        firstname: vec![0u8; 5],
        surname: vec![1u8; 5],
    };
    let p1 = Person {
        firstname: vec![2u8; 7],
        surname: vec![3u8; 2],
    };
    let p2 = Person {
        firstname: vec![4u8; 8],
        surname: vec![5u8; 8],
    };
    let p3 = Person {
        firstname: vec![6u8; 3],
        surname: vec![7u8; 1],
    };

    let people = [p0, p1, p2, p3];

    for (i, j) in people.iter().zip(people.iter().skip(1)) {
        println!("{:?}", (&i.firstname, &j.surname));
    }
}
for window in people.windows(2) {
    println!("{:?}", (&window[0].firstname, &window[1].surname))
}