KCh*_*oux 8 loops reference rust
在玩Rust时,我发现你可以通过引用而不是使用来循环Vec
s和HashMap
s(可能还有其他).iter()
.
let xs = vec![1, 2, 3, 4, 5];
for x in &xs {
println!("x == {}", x);
}
Run Code Online (Sandbox Code Playgroud)
该.iter()
函数似乎具有相同的行为.
let xs = vec![1, 2, 3, 4, 5];
for x in xs.iter() {
println!("x == {}", x);
}
Run Code Online (Sandbox Code Playgroud)
两种循环方法在功能上是相同的,还是两者之间的行为有细微差别?我注意到这.iter()
似乎是我发现的例子中普遍偏爱的方法.
两种循环方法在功能上是否相同
是的,它们完全相同.
impl<'a, T> IntoIterator for &'a Vec<T> {
type Item = &'a T;
type IntoIter = slice::Iter<'a, T>;
fn into_iter(self) -> slice::Iter<'a, T> {
self.iter()
}
}
Run Code Online (Sandbox Code Playgroud)
的实施IntoIterator
为&HashMap<K, V, S>
:
impl<'a, K, V, S> IntoIterator for &'a HashMap<K, V, S>
where K: Eq + Hash, S: HashState
{
type Item = (&'a K, &'a V);
type IntoIter = Iter<'a, K, V>;
fn into_iter(self) -> Iter<'a, K, V> {
self.iter()
}
}
Run Code Online (Sandbox Code Playgroud)
注意,两者都只是打电话iter()
.
我注意到.iter()似乎是我发现的例子中普遍偏爱的方法.
我用collection.iter()
,每当我想使用一个迭代器适配器,和我用&collection
,每当我想干脆直接遍历的集合.