如何在Rust的for循环中使用多个变量?

问题描述:

在C语言家族,我能做到这一点的一条线:如何在Rust的for循环中使用多个变量?

for(int i = lo, int j = mid+1; i <= mid && j <= hi; i++, j++){ 
    ... 
} 

但在除锈......我只能写这样的:

for i in lo..mid+1 { 
    let mut j = mid+1; 
    if j <= hi { 
     break; 
    } 
    ... 
    j += 1; 
} 

是否有一个更有效这种方式来实现?


使用迭代器适用于上面,而是使用迭代器使得一些场合,例如使用算术麻烦,如

for (int i = 0; i < n; i ++) { 
    if (a[i] == ...) { 
     i += 5; 
    } 
} 

生锈,这是行不通的。可变i不会被5递增,但由1代替:

for i in 0..n { 
    if a[i] == ... { 
     i += 5; 
    } 
} 
+0

谢谢〜它的工作原理。 Rust的for循环使用迭代器,这使得使用算术等一些场合变得有点麻烦。正如'for(int i = 0; i wind2412

可以创建两个平行范围的迭代器,zip它们,然后迭代虽然组合:

fn main() { 
    let values = [10, 20, 30, 40, 50, 60, 70, 80, 90]; 
    let lo = 2; 
    let mid = 5; 
    let hi = 7; 

    let early_indexes = lo..(mid + 1); 
    let late_indexes = (mid + 1)..(hi + 1); 
    for (i, j) in early_indexes.zip(late_indexes) { 
     println!("{}, {}", i, j); 
     println!("{} - {}", values[i], values[j]); 
    } 
} 

总有一天,包含范围为will be stabilized,你应该可以这样(取决于最终的语法):

let early_indexes = lo...mid; 
let late_indexes = (mid + 1)...hi; 
for (i, j) in early_indexes.zip(late_indexes) { 
    println!("{}, {}", i, j); 
    println!("{} - {}", values[i], values[j]); 
} 

如果你实际上是迭代虽然片,因为我已经证明我的例子,你也可以只是两个迭代器直接结合而忽略指数:

let early_values = values[lo..(mid + 1)].iter(); 
let late_values = values[(mid + 1)..(hi + 1)].iter(); 
for (i, j) in early_values.zip(late_values) { 
    println!("{}, {}", i, j); 
} 

变量i不会增加5,但增加1。

是的,增加一个步骤是烦人的,有一天it will also be stabilized。在此期间:

如果您需要完全控制,你可以随时使用whileloop

let mut i = 0; 
while i < n { 
    if a[i] == ... { 
     i += 5; 
    } 

    i += 1; 
} 
+0

感谢您解决我的问题的详细说明! 〜 – wind2412