现实中的循环很多,比如我们在学校操场里跑步,一圈一圈的跑。在计算机中,循环 其实就是一种重复,在满足指定的条件下,重复的做某些事情。
Rust 语言中也有三种表示 循环 的语句:
loop
语句。一种重复执行且永远不会结束的循环。while
语句。一种在某些条件为真的情况下就会永远执行下去的循环。for
语句。一种有确定次数的循环。
for 循环
代码语言:txt复制for 临时变量 in 左区间..右区间 {
// 执行业务逻辑
}
左区间..右区间,这是一个左闭右开的区间,1..5,那就只包含 1,2,3,4
代码语言:txt复制for num in 1..5{
println!("num is {}", num);
}
//输出
num is 1
num is 2
num is 3
num is 4
可以使用 a..=b 表示两端都包含在内的范围。
代码语言:txt复制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 - 在每次迭代中借用集合中的一个元素。这样集合本身不会被改变,循环之后仍可以使用。
代码语言:txt复制 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)了。
代码语言:txt复制 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)借用集合中的每个元素,从而允许集合被就地修改。
就是停止本次执行剩下的语句,直接进入下一个循环。
代码语言:txt复制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 循环
代码语言:txt复制while ( 条件表达式 ) {
// 执行业务逻辑
}
上面的条件表达式为真,就会执行 while 循环。
代码语言:txt复制 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
代码语言:txt复制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