如何使用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
对象。
答案 0 :(得分:2)
所有迭代器都有一个next()
函数,它使迭代器前进并返回Option<Self::Item>
(也就是说,它们返回None
或Some
,其中包含任何类型的值你可以迭代。你可以自己调用这个函数来手动增加迭代器,但是你需要多次,这听起来像是解决了你的问题。
答案 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
内部执行的操作相同。