簡體   English   中英

如何在Rust的for循環中使用多個變量?

[英]How to use multiple variables in Rust's for loop?

在C語言系列中,我可以在一行中執行此操作:

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

但在Rust ...我只能這樣寫:

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;
    }
}

在Rust中,這不起作用。 變量i不會增加5,而是增加1:

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

您可以創建兩個並行范圍的迭代器, 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]);
    }
}

有一天 ,包容性范圍將會穩定 ,你應該能夠做到這一點(取決於最終的語法):

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。

是的,增加一步是令人討厭的,有一天它也會穩定下來 同時:

如果您需要完全控制,您可以隨時使用whileloop

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

    i += 1;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM