Ranges

Whenever you do these things, you’re using the Scala Range data type:

// Range in a `for` expression
val xs = for i <- 1 to 3 yield i * 10

// converting a Range to a List or Vector
(1 to 10).toList
(1 to 10).toVector

// other Ranges
1 to 5
0 to 10 by 2
0 to 100 by 10

Can use until as well as to:

(1 to 5).toList      // List(1, 2, 3, 4, 5)
(1 until 5).toList   // List(1, 2, 3, 4)

Can use Char values in ranges:

val r = ('a' to 'f').toList        // List(a, b, c, d, e, f)
val r = ('a' to 'f' by 2).toList   // List(a, c, e)

Infix methods

In uses like this, Range is used as a Scala infix method:

1 to 3

These two are equivalent:

1 to 3
1.to(3)

Laziness

Ranges are lazy:

val r = 1 to Int.MaxValue    // nothing happens right away

// these are all lazy
r.take(1)
r.drop(1)
r.distinct
r.tail

// this forces the action
r.filter(_ > 100)
r.map(_ * 2)