如何使用for循环借用迭代器?

时间:2016-08-04 19:11:46

标签: rust

如何使用for ... in循环借用它运行的迭代器?例如:

let x = vec![1, 2, 3, 4];
let i = x.iter();
for a1 in i { break; } // iterate over just one "i"
for a2 in i { break; } // continue iterating through "i" here

您不能简单地将&i提供给for,因为它无法将&Iterator转换为Iterator对象。

3 个答案:

答案 0 :(得分:2)

所有迭代器都有一个next()函数,它使迭代器前进并返回Option<Self::Item>(也就是说,它们返回NoneSome,其中包含任何类型的值你可以迭代。你可以自己调用这个函数来手动增加迭代器,但是你需要多次,这听起来像是解决了你的问题。

答案 1 :(得分:2)

您可以使用Iterator::by_ref借用迭代器并在借用结束后继续使用它:

fn main() {
    let x = vec![1, 2, 3, 4];
    let mut i = x.iter();
    for _ in i.by_ref() { break; } // iterate over just one "i"
    for _ in i.by_ref() { break; } // continue iterating through "i" here
    assert_eq!(Some(&3), i.next())
}

答案 2 :(得分:1)

您可以对迭代器(&mut i)进行可变引用:

let x = vec![1, 2, 3, 4];
let mut i = x.iter();
for a1 in &mut i { break; }
for a2 in &mut i { break; }

这与Iterator::by_ref内部执行的操作相同。