Mastering Nested Loops with Scala

Introduction and Overview

Hello, keen programmer! Are you ready for a sensational Scala venture? Today, our expedition encompasses the broad world of nested loops.

Nested loops serve as a pivotal mechanism to repeat an event or a collection of events. What sets them apart from ordinary loops is their unique ability to nest loops within other loops!

Our goal today is to hone our skill with simple nested loops in Scala. We'll start by understanding the basic syntax and control flow, delve into nested for and while loops, and conclude with common pitfalls to avoid when dealing with nested loops.

Quick Refresher: For and While Loops in Scala

Before diving into nested loops, let's take a quick look back at for and while loops.

A for loop in Scala iterates over a ranged sequence:

Scala
for (i <- 1 to 5) {
    println(i) // This prints numbers 1 to 5
}

A while loop executes a block of code repeatedly as long as a given condition is true:

Scala
var count = 1
while (count <= 5) {
    println(count) // This also prints numbers 1 to 5
    count += 1
}

Introduction to Nested Loops

With our refreshed understanding of for and while loops, we can go deeper into the concept of nested loops. Put simply, a nested loop is a loop within a loop. For each iteration of the outer loop, the inner loop completes its entire cycle of iterations. Here's a basic nested loop in Scala:

Scala
for(outer <- 1 to 2){
    for(inner <- 1 to 3){
        println(s"Outer:$outer Inner:$inner")
    }
}

/*
This code provides the following output:
Outer:1 Inner:1
Outer:1 Inner:2
Outer:1 Inner:3
Outer:2 Inner:1
Outer:2 Inner:2
Outer:2 Inner:3
*/

Nested For Loops in Scala

Nested for loops execute all their iterations within each cycle of the outer loop, making them highly effective for managing tasks such as processing two variables in a systematic way.

Scala
for(row <- 1 to 3) {
    for(col <- 1 to 4) {
        print("* ")
    }
    println() // jump to next line after each row
}

/*
This code provides the following output:
* * * * 
* * * * 
* * * * 
*/

Another interesting Scala way of having nested loops is combining the two loops in a single line. This can make the code more concise:

Scala
for (i <- 1 to 2; j <- 1 to 2) {
    println(s"i: $i, j: $j")
}

/*
This code provides the following output:
i: 1, j: 1
i: 1, j: 2
i: 2, j: 1
i: 2, j: 2
*/

By using this concise form, you achieve the same functionality as the traditional nested loops but with more compact and readable code. This technique is particularly useful when you need to iterate over combinations of two ranges. Here, for every combination of i and j, the values are printed on the same line.

Sign up

Join the 1M+ learners on CodeSignal

Be a part of our community of 1M+ users who develop and demonstrate their skills on CodeSignal