Rust流程控制——循环(loop,while,for) loop循环 Rust 提供了 loop
关键字来实现一个无限循环。
可以使用 break
语句在任何时候退出一个循环,另外可用 continue
跳过循环体的剩余部分并开始下一轮循环。
循环返回值 loop为无限循环,使用break退出,退出时有返回值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 fn main (){ let mut counter = 0 ; let result = loop { counter += 1 ; if counter >= 10 { break counter*2 } }; println! ("{}" ,result); }
嵌套循环中断 嵌套循环和标签,利用标签决定跳出哪个循环,注意标签是’name:loop。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 fn main (){ 'outer :loop { println! ("outer loop" ); 'inner :loop { println! ("break outer loop" ); break 'outer ; }; }; }
continue跳出循环体剩余部分 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 fn main (){ let mut counter = 0 ; loop { counter += 1 ; if counter >5 { continue ; } println! ("no continue" ); }; }
while循环 while
关键字可以用作当型循环(当条件满足时循环)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 fn main (){ let mut counter = 0 ; while counter < 5 { if counter %2 == 0 { println! ("偶数" ); }else { println! ("奇数" ); } counter +=1 ; } }
for循环 区间 for in
结构可以遍历一个 Iterator
(迭代器)。创建迭代器的一个最简单的方法是使 用区间标记 a..b
。这会生成从 a
(包含此值) 到 b
(不含此值)的,步长为 1 的 一系列值。
区间0..5不包含5,0..=5包含5。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 fn main (){ for counter in 0 ..5 { if counter %2 == 0 { println! ("偶数" ); }else { println! ("奇数" ); } } for counter in 0 ..=4 { if counter %2 == 0 { println! ("偶数" ); }else { println! ("奇数" ); } } }
迭代器 1.iter - 在每次迭代中借用集合中的一个元素。这样集合本身不会被改变,循环之后仍 可以使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 fn main (){ let names = vec! ["Curry" ,"James" ,"Durant" ]; for name in names.iter(){ match name { &"Curry" => { println! ("Best shooter" ) } _ =>{ println! ("Good player" ); } } } }
2.into_iter - 会消耗集合。在每次迭代中,集合中的数据本身会被提供。一旦集合被消耗了,之后就无法再使用了,因为它已经在循环中被 “移除”(move)了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 fn main (){ let names = vec! ["Curry" ,"James" ,"Durant" ]; for name in names.into_iter(){ match name { "Curry" => { println! ("Best shooter" ) } _ =>{ println! ("Good player" ); } } } }
3.iter_mut - 可变地(mutably)借用集合中的每个元素,从而允许集合被就地修改。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 fn main (){ let mut names = vec! ["Curry" ,"James" ,"Durant" ]; for name in names.iter_mut(){ *name = match name { &mut "Curry" => { "Best shooter" } _ =>{ "Good player" } } } println! ("{:?}" ,names); }