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