В Scala, кортеж (Тuple) - это контейнер содержащий упорядоченный набор элементов различного типа. Кортежи неизменяемы.
Кортежи могут пригодиться, когда нам нужно вернуть сразу несколько значений из функции.
Кортеж может быть создан как:
val ingredient = ("Sugar", 25)
Такая запись создает кортеж, содержащий пару элементов String и Int.
Выводимый тип ingredient - это (String, Int).
Доступ к элементам
Один из способов доступа к элементам кортежа — по их позиции.
tuple._n дает n-ый элемент (столько, сколько существует элементов).
println(ingredient._1) // Sugar
println(ingredient._2) // 25
Один из способов доступа к элементам кортежа — по их позиции.
Доступ к отдельным элементам осуществляется с помощью tuple(0), tuple(1) и так далее.
println(ingredient(0)) // Sugar
println(ingredient(1)) // 25
Сопоставление с образцом для кортежей
Кортеж также можно распаковать с помощью сопоставления с образцом:
val (name, quantity) = ingredient
println(name)     // Sugar
println(quantity) // 25
Здесь выводимый тип name - String и выводимый тип quantity - Int.
Вот еще один пример сопоставления с образцом кортежа:
val planets =
  List(("Mercury", 57.9), ("Venus", 108.2), ("Earth", 149.6),
       ("Mars", 227.9), ("Jupiter", 778.3))
planets.foreach {
  case ("Earth", distance) =>
    println(s"Our planet is $distance million kilometers from the sun")
  case _ =>
}
Или, в for-comprehension:
val numPairs = List((2, 5), (3, -7), (20, 56))
for ((a, b) <- numPairs) {
  println(a * b)
}
val numPairs = List((2, 5), (3, -7), (20, 56))
for (a, b) <- numPairs do
  println(a * b)
Кортежи и кейс-классы
Иногда бывает трудно выбирать между кортежами и кейс-классами.
Кейс-классы содержат именованные элементы. Имена могут улучшить читаемость некоторых типов кода.
В приведенном выше примере мы могли бы определить планеты, как case class Planet(name: String, distance: Double),
а не использовать кортежи.
Дополнительные ресурсы
- Дополнительная информация о кортежах - в книге Scala Book
 
Contributors to this page:
Contents
- Введение
 - Основы
 - Единобразие типов
 - Классы
 - Значения Параметров По умолчанию
 - Именованные Аргументы
 - Трейты
 - Кортежи
 - Композиция классов с трейтами
 - Функции Высшего Порядка
 - Вложенные Методы
 - Множественные списки параметров (Каррирование)
 - Классы Образцы
 - Сопоставление с примером
 - Объекты Одиночки
 - Регулярные Выражения
 - Объект Экстрактор
 - Сложные for-выражения
 - Обобщенные Классы
 - Вариантность
 - Верхнее Ограничение Типа
 - Нижнее Ограничение Типа
 - Внутренние классы
 - Члены Абстрактного Типа
 - Составные Типы
 - Самоописываемые типы
 - Контекстные параметры, также известные, как неявные параметры
 - Неявные Преобразования
 - Полиморфные методы
 - Выведение Типа
 - Операторы
 - Вызов по имени
 - Аннотации
 - Пакеты и Импорт
 - Объекты Пакета