官术网_书友最值得收藏!

  • Learning Rust
  • Paul Johnson Vesa Kaihlavirta
  • 245字
  • 2021-07-02 23:07:24

Using enumerate

A loop condition can also be more complex, using multiple conditions and variables. For example, the for loop can be tracked using enumerate. This will keep track of how many times the loop has executed, as shown here:

for(i, j) in (10..20).enumerate() 
{ 
     println!("loop has executed {} times. j = {}", i, j); 
} 

The following is the output:

Say we have an array that we need to iterate over to obtain the values. Here, the enumerate method can be used to obtain the value of the array members. The value returned in the condition will be a reference, so a code such as the one shown in the following example will fail to execute (line is a & reference whereas an i32 is expected):

// 04/enumerate/src/main.rs
fn main() { let my_array: [i32; 7] = [1i32,3,5,7,9,11,13]; let mut value = 0i32; for(_, line) in my_array.iter().enumerate() { value += line; } println!("{}", value); }

This can be simply converted back from the reference value, as follows:

for(_, line) in my_array.iter().enumerate() 
    { 
       value += *line; 
    } 

The iter().enumerate() method can equally be used with the Vec type (or any other type that implements the iterator trait), as shown in the following code:

// 04/arrayloop/src/main.rs
fn main() { let my_array = vec![1i32,3,5,7,9,11,13]; let mut value = 0i32; for(_,line) in my_array.iter().enumerate() { value += *line; } println!("{}", value); }

In both cases, the value given at the end will be 49, as shown in the following screenshot:

主站蜘蛛池模板: 宁都县| 车险| 汝阳县| 博白县| 泗洪县| 建水县| 会同县| 伊宁市| 南通市| 龙口市| 呈贡县| 三台县| 黄龙县| 明水县| 冷水江市| 蕲春县| 兖州市| 赤水市| 丹巴县| 眉山市| 宝兴县| 日土县| 余庆县| 蕲春县| 滦南县| 宝鸡市| 三江| 陇川县| 宜都市| 清水河县| 象山县| 泾源县| 雷山县| 鲁山县| 日喀则市| 德化县| 科技| 东安县| 西宁市| 景德镇市| 读书|