A nested loop has one loop inside of another. These are typically used for working with two dimensions such as printing stars in rows and columns as shown below. When a loop is nested inside another loop, the inner loop runs many times inside the outer loop. In each iteration of the outer loop, the inner loop will be re-started. The inner loop must finish all of its iterations before the outer loop can continue to its next iteration.
Example:
for row in 0..3 {
for col in 0..5 {
print!("*");
}
println!();
}
// This code prints a rectangle with 3 rows and 5 columns, filled with '*'
Iterating through multidimensional arrays
Nested loops are also helpful when we want to iterate through a multi dimensional array, for example:
let arr = vec![
vec![1, 2],
vec![3, 4],
vec![5, 6],
];
for i in 0..3 {
for j in 0..2 {
println!("{}", arr[i][j]);
}
}
// This outputs each sub-element in arr one at a time
Breaking nested loops
In a nested loop, a break statement only stops the loop it is placed in. Therefore, if a break is placed in the inner loop, the outer loop still continues. For example:
let arr = vec![
vec![1, 2],
vec![3, 4],
vec![5, 6],
];
for i in 0..3 {
for j in 0..2 {
if arr[i][j] == 3 {
break;
}
println!("{}", arr[i][j]);
}
}
// prints the numbers 1, 2, 5 and 6 on different lines
When i is 1 and j is 0, we execute the break. This means we stop the inner loop and go back to the outer loop to continue from the next iteration, which is i = 2. And as you can see, we print all the elements of row 2.
However, if the break is placed in the outer loop, all of the looping stops. For example:
let arr = vec![
vec![1, 2],
vec![3, 4],
vec![5, 6],
];
for i in 0..3 {
if arr[i][0] == 3 {
break;
}
for j in 0..2 {
println!("{}", arr[i][j]);
}
}
// prints the numbers 1 and 2 on different lines
Assignment
Follow the Coding Tutorial and let's write some nested loops.
Hint
Look at the examples above if you get stuck.
Free plan: 30 tutor messages. Premium is unlimited.