14.循环

现实中的循环很多,比如我们在学校操场里跑步,一圈一圈的跑。在计算机中,循环 其实就是一种重复,在满足指定的条件下,重复的做某些事情。

Rust 语言中也有三种表示 循环 的语句:

  • loop 语句。一种重复执行且永远不会结束的循环。
  • while 语句。一种在某些条件为真的情况下就会永远执行下去的循环。
  • for 语句。一种有确定次数的循环。

for 循环

1
2
3
for 临时变量 in 左区间..右区间 {
// 执行业务逻辑
}

左区间..右区间,这是一个左闭右开的区间,1..5,那就只包含 1,2,3,4

1
2
3
4
5
6
7
8
for num in 1..5{
println!("num is {}", num);
}
//输出
num is 1
num is 2
num is 3
num is 4

可以使用 a..=b 表示两端都包含在内的范围。

1
2
3
4
5
6
7
8
9
for num in 1..=5 {
println!("num is {}", num);
}
输出
num is 1
num is 2
num is 3
num is 4
num is 5

for 与迭代器

iter - 在每次迭代中借用集合中的一个元素。这样集合本身不会被改变,循环之后仍可以使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 let studyList = vec![
"《Go语言极简一本通》",
"Go语言微服务架构核心22讲",
"从0到Go语言微服务架构师",
];
for name in studyList.iter() {
match name {
&"从0到Go语言微服务架构师" => println!("恭喜你进阶到第三阶段-{}!", name),
_ => println!("学习: {}", name),
}
}
//输出
学习: 《Go语言极简一本通》
学习: Go语言微服务架构核心22讲
恭喜你进阶到第三阶段-从0到Go语言微服务架构师!

into_iter - 会消耗集合。在每次迭代中,集合中的数据本身会被提供。一旦集合被消耗了,之后就无法再使用了,因为它已经在循环中被 “移除”(move)了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 let studyList2 = vec![
"《Go语言极简一本通》",
"Go语言微服务架构核心22讲",
"从0到Go语言微服务架构师",
];
for name in studyList2.into_iter() {
match name {
"从0到Go语言微服务架构师" => println!("恭喜你进阶到第三阶段-{}!", name),
_ => println!("学习: {}", name),
}
}
输出
学习: 《Go语言极简一本通》
学习: Go语言微服务架构核心22讲
恭喜你进阶到第三阶段-从0到Go语言微服务架构师!

iter_mut - 可变地(mutably)借用集合中的每个元素,从而允许集合被就地修改。
就是停止本次执行剩下的语句,直接进入下一个循环。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
let mut studyList3 = vec![
"《Go语言极简一本通》",
"Go语言微服务架构核心22讲",
"从0到Go语言微服务架构师",
];
for name in studyList3.iter_mut() {
*name = match name {
&mut "从0到Go语言微服务架构师" => {
"恭喜你进阶到第三阶段---从0到Go语言微服务架构师"
}
_ => *name,
}
}
println!("studyList3: {:?}", studyList3);
输出
studyList3: ["《Go语言极简一本通》", "Go语言微服务架构核心22讲", "恭喜你进阶到第三阶段---从0到Go语言微服务架构师"]

while 循环

1
2
3
while ( 条件表达式 ) {
// 执行业务逻辑
}

上面的条件表达式为真,就会执行 while 循环。

1
2
3
4
5
6
7
8
9
10
11
 let mut num = 1;
while num < 20{
println!("num is {}",num);
num= num*2;
}
//输出
num is 1
num is 2
num is 4
num is 8
num is 16

loop 循环+break

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
loop {
// 执行业务逻辑
}
break; 中断的意思,就是跳出loop循环

let mut num = 1;
loop {
if num > 20{
break;
}
println!("num is {}",num);
num= num*3;
}
//输出
num is 1
num is 3
num is 9

添加微信 公众号更多内容
wechat gzh