gpt4 book ai didi

rust - 在循环 Rust 中改变运行变量

转载 作者:行者123 更新时间:2023-12-05 01:26:41 25 4
gpt4 key购买 nike

我在 Rust 中有一个 for 循环,在满足的条件下我想重新运行循环的一部分。例如:

for mut n in 0..vector.len(){
...
if condition {
n = 3;
}
}

但在下一次迭代中,n 不是 3,循环继续。有什么想法吗?

最佳答案

for n in 0..x分配给 n从 0 到(但不包括)x 的值不考虑 n 的突变, 如果它们发生。在其他具有 foreach 样式迭代的语言中就是这种情况,例如在 Python 中使用 for n in range(len(vector)) , 或者在 C++20 中使用 for (auto n: std::views::iota(0, vector.size())) .

如果您需要偶尔返回到以前的状态,如 C 的 for (n = 0; n < x; n++) 所提供的那样,最简单的选择是只编写 C 风格的循环代码:

let mut n = 0;
while n < vector.len() {
...
if condition {
n = 3;
continue;
}
n += 1;
}

缺点是n += 1被埋在循环的末尾,所以 continue只是想继续循环(不重置循环计数器)实际上无法增加 n .如果这让您感到困扰(我也会感到困扰),您可以切换到一个略有不同的基于 foreach 的实现,其中范围是明确的。而不是 for ,你用 while let 遍历范围.这为您提供了 foreach 的稳健性,同时允许您从循环内部修改要循环的范围:

let mut range = 0..vector.len();
while let Some(n) = range.next() {
...
if condition {
range = 3..vector.len();
}
}

请注意,您的原始代码评估了 vector.len()只有一次。 C 风格的循环每次都检查它,最后一个例子也在 condition 时检查它。是真的。如果你改变矢量的大小,你可能应该伴随vector.push(...)通过 range = n..vector.len()修正上限。

关于rust - 在循环 Rust 中改变运行变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70136888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com