在玩 Rust 时,我发现你可以循环Vec
s and HashMap
s(可能还有其他)通过引用,而不是使用.iter()
.
let xs = vec![1, 2, 3, 4, 5];
for x in &xs {
println!("x == {}", x);
}
The .iter()
函数似乎具有相同的行为。
let xs = vec![1, 2, 3, 4, 5];
for x in xs.iter() {
println!("x == {}", x);
}
这两种循环集合的方法在功能上是否相同,或者两者的行为之间是否存在细微的差异?我注意到.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()
}
}
:
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()
}
}
请注意,两者都只是调用iter()
.
我注意到 .iter() 似乎是我发现的示例中普遍首选的方法。
I use collection.iter()
每当我想使用迭代器适配器时,我都会使用&collection
每当我想直接迭代集合时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)