Getting the nth element of a list
A list holds a certain number of elements. The first element is at index 0, and the second element at index 1. If the index is out of range, we get an exception.
We will write a method to find the nth element of a list. This method will return an option. If n is out of bounds, we will return None. Otherwise, we will return Some(elem). Let's look at the code and then a diagram to understand it better:
import scala.annotation.tailrec
object NthElemOfList extends App {
def nth(list: List[Int], n: Int): Option[Int] = {
@tailrec
def nthElem(list: List[Int], acc: (Int, Int)): Option[Int] = list match {
case Nil => None
case head :: tail => {
if (acc._1 == acc._2) // 1
Some(head)
else
nthElem(tail, (acc._1 + 1, acc._2)) // 2
}
}
nthElem(list, (0, n)) // 3
}
val bigList = 1 to 100000 toList // 4
println(nth(List(1, 2, 3, 4, 5, 6), 3).getOrElse("No such elem"))
println(nth(List(1, 2, 3, 4, 5, 6), 300...