Split a sequence into a prefix and the rest.

take-drop `take` keeps the first n elements and `drop` skips them, each returning a new sequence without changing the original.

Take and Drop

n
TakeDrop.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val n = 2
    val nums = List(1, 2, 3, 4, 5)
    val firstN = nums.take(n)
    val rest = nums.drop(n)

    println("taken=" + firstN.mkString(","))
    println("rest=" + rest.mkString(","))
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val n = 1
    val nums = List(1, 2, 3, 4, 5)
    val firstN = nums.take(n)
    val rest = nums.drop(n)

    println("taken=" + firstN.mkString(","))
    println("rest=" + rest.mkString(","))
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val n = 4
    val nums = List(1, 2, 3, 4, 5)
    val firstN = nums.take(n)
    val rest = nums.drop(n)

    println("taken=" + firstN.mkString(","))
    println("rest=" + rest.mkString(","))
  }
}
  1. n ← 2, nums ← List(1, 2, 3, 4, 5), firstN ← List(1, 2), rest ← List(3, 4, 5)

    1object Main {2  def main(args: Array[String]): Unit = {3    val n→ 2 = 2 //@n=1, 44    val nums→ List(1, 2, 3, 4, 5) = List(1, 2, 3, 4, 5)5    val firstN→ List(1, 2) = numsList(1, 2, 3, 4, 5).take(n2)6    val rest→ List(3, 4, 5) = numsList(1, 2, 3, 4, 5).drop(n2)78    println("taken=" + firstNList(1, 2).mkString(","))9    println("rest=" + restList(3, 4, 5).mkString(","))10  }11}
    outputtaken=1,2
    rest=3,4,5
  1. n ← 1, nums ← List(1, 2, 3, 4, 5), firstN ← List(1), rest ← List(2, 3, 4, 5)

    1object Main {2  def main(args: Array[String]): Unit = {3    val n→ 1 = 14    val nums→ List(1, 2, 3, 4, 5) = List(1, 2, 3, 4, 5)5    val firstN→ List(1) = numsList(1, 2, 3, 4, 5).take(n1)6    val rest→ List(2, 3, 4, 5) = numsList(1, 2, 3, 4, 5).drop(n1)78    println("taken=" + firstNList(1).mkString(","))9    println("rest=" + restList(2, 3, 4, 5).mkString(","))10  }11}
    outputtaken=1
    rest=2,3,4,5
  1. n ← 4, nums ← List(1, 2, 3, 4, 5), firstN ← List(1, 2, 3, 4), rest ← List(5)

    1object Main {2  def main(args: Array[String]): Unit = {3    val n→ 4 = 44    val nums→ List(1, 2, 3, 4, 5) = List(1, 2, 3, 4, 5)5    val firstN→ List(1, 2, 3, 4) = numsList(1, 2, 3, 4, 5).take(n4)6    val rest→ List(5) = numsList(1, 2, 3, 4, 5).drop(n4)78    println("taken=" + firstNList(1, 2, 3, 4).mkString(","))9    println("rest=" + restList(5).mkString(","))10  }11}
    outputtaken=1,2,3,4
    rest=5