Skip to content
AgileLogics
3 min read

Tuples

Prerequisites: Methods

A tuple groups a fixed number of values, which can have different types:

@main def tuples(): Unit =
  val person = ("Ada", 36, "London")
  println(person)
  println(person(0))
  println(person._2)

  val (name, age, city) = person
  println(s"$name, $age, from $city")

  val pair = "one" -> 1
  println(pair)
(Ada,36,London)
Ada
36
Ada, 36, from London
(one,1)
  • person has the type (String, Int, String).
  • Access elements by index (person(0)) or with _1, _2, ... (numbered from 1).
  • Unpack with val (a, b, c) = ....
  • a -> b is a shorthand for the pair (a, b) — used for Map entries.

Tuples in collections

@main def pairs(): Unit =
  val scores = List(("Ada", 91), ("Linus", 78), ("Grace", 85))
  for (name, score) <- scores if score > 80 do
    println(s"$name: $score")
  println(scores.maxBy(_._2))
Ada: 91
Grace: 85
(Ada,91)

Tuples are ideal for quick, local groupings. When the values mean something together — a person, an order — use a case class instead (Level 2): person.name reads far better than person._1.