所以基本上,我想这样做
for i=0;i<x.len()-1
for j=i;j<x.len
//do stuff with x[j] and x[i] at the same time
例如,我想使用与使用 2 个for
循环进行排序相同的技术,将元素与元素进行比较并交换它们。然而,我不想排序,只是给出了这个例子以便更好地理解。
我可以以某种方式这样做:
for x in vec.iter()
for y in x.next()
或类似的东西?
另外,我可以在迭代时以某种方式记住某个元素的位置吗?
谢谢!
您建议的代码:
for x in vec.iter()
for y in x.next()
即使它在语法上有效x
也不起作用,因为它不是迭代器,而是vec
. 要获得迭代器,您需要将其存储在一个变量中并将for
循环脱糖为while let
:
let mut iter = v.iter();
while let Some(x) = iter {
// ...
}
现在我们有了一个明确的iter
,我们可以让内部循环迭代剩余的项目。我们不能只是迭代,iter
因为这会耗尽它的外循环,但我们可以克隆它以获取当前位置的外迭代器的副本:
let mut iter = v.iter();
while let Some(x) = iter {
for y in iter.clone() {
// ...
}
}
请注意,我们不需要iter.next()
在内循环之前显式调用,因为第一项已经被外循环花费了,内循环自然只会观察每次迭代的剩余项。
完整的代码如下所示:
let v = vec![1, 2, 3];
let mut iter = v.iter();
while let Some(x) = iter.next() {
println!("x = {}", x);
for y in iter.clone() {
println!(" y = {}", y);
}
}
输出:
x = 1
y = 2
y = 3
x = 2
y = 3
x = 3
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句