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

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:

主站蜘蛛池模板: 方正县| 武定县| 杭锦后旗| 林州市| 弥勒县| 广元市| 大关县| 澄迈县| 耿马| 织金县| 云浮市| 文登市| 巢湖市| 大同县| 贵南县| 宜川县| 廉江市| 瑞安市| 长兴县| 荥经县| 鄯善县| 墨脱县| 乡城县| 普兰店市| 华安县| 怀远县| 禹州市| 云梦县| 泗阳县| 红河县| 白河县| 馆陶县| 灵川县| 凭祥市| 绥宁县| 神木县| 龙游县| 白河县| 江永县| 崇义县| 桐乡市|